Python - 面向对象编程 - 小实战(3)
需求
- 房子(House)有户型、总面积、家具名称列表;新房子没有任何的家具
- 家具(HouseItem)有名字、占地面积
- 席梦思(bed) 占地 4 平米
- 衣柜(bed) 占地 2 平米
- 餐桌(bed) 占地 1.5 平米
- 将以上三个家具添加到房子中
- 打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
需求分析
- 家具有两个属性,房子表面上有三个属性
- 新房子没有任何的家具,代表构造方法不需要给家具名称列表属性初始化赋值
- 但房子其实还有一个特殊属性,剩余面积,它的初始值应该和总面积相同
- 房子添加家具后,剩余面积应该减掉家具的占地面积
- 席梦思、衣柜、餐桌都是一个具体的对象,都是家具类的实例对象
思考:房子、家具两个类应该先开发哪个类
- 家具类
- 因为家具类简单,只有两个方法,且没有行为
- 房子要使用到家具,被依赖的类,通常应该先开发,可以避免在开发主类过程中,要中途插入开发被依赖的类
类图
实现代码
家具类
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 家具:['席梦思', '衣柜', '餐桌']