【需求】
- 房子(House)有户型,总面积和家具名称列表,新房没有家具
- 家具(HouseItem)有名字和占地面积,床(4m2),柜(2m2),桌(1.5m2)
- 将三件家具添加到房中
- 打印房子时,要求输出:户型,总面积,剩余面积,家具名列表
【剩余面积】
- 在创建房子对象时,定义剩余面积,其初始值和总面积相等
- 当调用 add_item 方法时,向房内添加家具,剩余面积 = 剩余面积 - 家具面积
【添加家具】
- 判断家具面积是否超过剩余面积,超过就提示不能添加
- 将家具的名称追加到家具名称列表中
- 用房子的剩余面积 - 家具面积
【小结】
- 先开发家具类,房子要使用到家具,被使用的类通常先开发
- 创建房子类要使用到 __init__ 和 __str__ 两个内置方法
- 准备了一个 add_item 方法准备添加家具
- 使用房子类创建了一个房子对象
- 让房子对象调用三次 add_item 方法,将家具以实参传递到 add_item 内部
- 主程序只负责创建房子对象和家具对象
- 让房子对象调用 add_item 方法将家具添加到房子中
- 面积计算,剩余面积和家具列表等处理都被封装到房子类的内部
# 家具类 class HouseItem: def __init__(self, name, area): self.name = name self.area = area def __str__(self): return "[%s] 占地 %.2f" % (self.name, self.area) # 类与类之间空两行 # 房子类 class House: def __init__(self, house_type, area): self.house_type = house_type self.area = area # 剩余面积 self.free_area = area # 家具名称列表 self.item_list = [] def __str__(self): return ("户型: %s 总面积: %.2f[剩余: %.2f] 家具: %s" % (self.house_type, self.area, self.free_area, self.item_list)) def add_item(self, item): print("要添加 %s" % item) # 1.判断家具的面积 if item.area > self.free_area: print("%s 的面积太大,房内剩余空间不足" % item.name) return # 2.将家具的名称添加到列表中 self.item_list.append(item.name) # 3.计算剩余面积 self.free_area -= item.area # 1.创建家具 bed = HouseItem("西蒙斯", 4) chest = HouseItem("衣柜", 2) table = HouseItem("餐桌", 1.5) print(bed) print(chest) print(table) # 2.创建房子对象 my_home = House("两室一厅", 70) my_home.add_item(bed) my_home.add_item(chest) my_home.add_item(table) print(my_home)