需求
- 房子(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 家具:['席夢思', '衣櫃', '餐桌']