Python - 面向对象编程 - 小实战(3)

简介: Python - 面向对象编程 - 小实战(3)

需求


  • 房子(House)有户型、总面积、家具名称列表;新房子没有任何的家具
  • 家具(HouseItem)有名字、占地面积
  • 席梦思(bed) 占地 4 平米
  • 衣柜(bed) 占地 2 平米
  • 餐桌(bed) 占地 1.5 平米
  • 将以上三个家具添加到房子中
  • 打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表

 

需求分析


  • 家具有两个属性,房子表面上有三个属性
  • 新房子没有任何的家具,代表构造方法不需要给家具名称列表属性初始化赋值
  • 但房子其实还有一个特殊属性,剩余面积,它的初始值应该和总面积相同
  • 房子添加家具后,剩余面积应该减掉家具的占地面积
  • 席梦思、衣柜、餐桌都是一个具体的对象,都是家具类的实例对象

 

思考:房子、家具两个类应该先开发哪个类

  • 家具类
  • 因为家具类简单,只有两个方法,且没有行为
  • 房子要使用到家具,被依赖的类,通常应该先开发,可以避免在开发主类过程中,要中途插入开发被依赖的类

 

类图


image.png

实现代码


家具类

class HouseItem:
    # 构造方法
    def __init__(self, name, area):
        self.name = name
        self.area = area
    def __str__(self):
        return f"家具名称:{self.name} 占地面积:{self.area}"


房子类

class House:
    # 构造方法
    def __init__(self, type, area):
        self.house_type = type
        self.area = area
        # 剩余面积
        self.free_area = self.area
        # 家具名称列表
        self.item_list = []
    # str
    def __str__(self):
        return f"户型:{self.house_type}\n" \
               f"总面积:{self.area}\n" \
               f"剩余面积:{self.free_area}\n" \
               f"家具:{self.item_list}\n"
    # 添加家具
    def add_item(self, item):
        # 1、家具占地面积>剩余面积
        if item.area > self.free_area:
            print("剩余面积不足以添加 ", item.name)
            return
        # 2、添加家具名称
        self.item_list.append(item.name)
        # 3、计算剩余面积
        self.free_area -= item.area


执行代码

# 创建三个家具
bed = HouseItem("席梦思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)
# 创建房子实例对象
poloHouse = House("120平复试", 120)
# 添加家具
poloHouse.add_item(bed)
poloHouse.add_item(chest)
poloHouse.add_item(table)
# 打印房子信息
print(poloHouse)
# 输出结果
户型:120平复试
总面积:120
剩余面积:112.5
家具:['席梦思', '衣柜', '餐桌']
相关文章
|
4天前
|
存储 前端开发 机器人
Python网络数据抓取(6):Scrapy 实战
Python网络数据抓取(6):Scrapy 实战
22 2
|
4天前
|
Python
【Python进阶(三)】——面向对象编程
【Python进阶(三)】——面向对象编程
|
4天前
|
机器学习/深度学习 Python
【Python实战】——神经网络识别手写数字(三)
【Python实战】——神经网络识别手写数字
|
4天前
|
机器学习/深度学习 数据可视化 Python
【Python实战】——神经网络识别手写数字(二)
【Python实战】——神经网络识别手写数字(三)
|
1天前
|
网络协议 Python
Python 网络编程实战:构建高效的网络应用
【5月更文挑战第18天】Python在数字化时代成为构建网络应用的热门语言,因其简洁的语法和强大功能。本文介绍了网络编程基础知识,包括TCP和UDP套接字,强调异步编程、数据压缩和连接池的关键作用。提供了一个简单的TCP服务器和客户端代码示例,并提及优化与改进方向,鼓励读者通过实践提升网络应用性能。
19 6
|
1天前
|
算法 Java Python
【Python 的内存管理机制专栏】Python 内存管理实战:性能优化与内存泄漏检测
【5月更文挑战第18天】Python内存管理关乎程序性能与稳定性。优化包括避免过多临时对象,如优化列表推导式减少对象创建。警惕循环引用造成的内存泄漏,如示例中的Node类。使用`gc`模块检测泄漏,通过`gc.set_debug(gc.DEBUG_LEAK)`和`gc.collect()`获取信息。实践中需持续分析内存使用,优化算法、数据结构和资源释放,以提升程序质量与效率。
【Python 的内存管理机制专栏】Python 内存管理实战:性能优化与内存泄漏检测
|
4天前
|
存储 缓存 监控
利用Python和Flask构建RESTful API的实战指南
在当今的软件开发中,RESTful API已成为前后端分离架构中的核心组件。本文将带你走进实战,通过Python的Flask框架,一步步构建出高效、安全的RESTful API。我们将从项目初始化、路由设置、数据验证、错误处理到API文档生成,全方位地探讨如何构建RESTful API,并给出一些实用的最佳实践和优化建议。
|
4天前
|
Python
Python自动化办公实战案例:文件整理与邮件发送
Python自动化办公实战案例:文件整理与邮件发送
9 0
|
4天前
|
存储 人工智能 测试技术
python自动化测试实战 —— CSDN的Web页面自动化测试
python自动化测试实战 —— CSDN的Web页面自动化测试
194 0
|
4天前
|
Web App开发 设计模式 测试技术
python自动化测试实战 —— 自动化测试框架的实例
python自动化测试实战 —— 自动化测试框架的实例
15 0