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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM