封裝案例1

01. 封裝

  1. 封裝 是面向對象編程的一大特色
  2. 面向對象編程的 第一步 —— 將 屬性 和 方法 封裝 到一個抽象的  中
  3. 外界 使用  建立 對象,而後 讓對象調用方法
  4. 對象方法的細節 都被 封裝 在 類的內部

02. 小明愛跑步

需求python

  1. 小明 體重 75.0 公斤
  2. 小明每次 跑步 會減肥 0.5 公斤
  3. 小明每次 吃東西 體重增長 1 公斤

 

 

編程

提示:在 對象的方法內部,是能夠 直接訪問對象的屬性 的!app

  • 代碼實現:
class Person: """人類""" def __init__(self, name, weight): self.name = name self.weight = weight def __str__(self): return "個人名字叫 %s 體重 %.2f 公斤" % (self.name, self.weight) def run(self): """跑步""" print("%s 愛跑步,跑步鍛鍊身體" % self.name) self.weight -= 0.5 def eat(self): """吃東西""" print("%s 是吃貨,吃完這頓再減肥" % self.name) self.weight += 1 xiaoming = Person("小明", 75) xiaoming.run() xiaoming.eat() xiaoming.eat() print(xiaoming) 

2.1 小明愛跑步擴展 —— 小美也愛跑步

需求spa

  1. 小明 和 小美 都愛跑步
  2. 小明 體重 75.0 公斤
  3. 小美 體重 45.0 公斤
  4. 每次 跑步 都會減小 0.5 公斤
  5. 每次 吃東西 都會增長 1 公斤

 

 

3d

提示code

  1. 在 對象的方法內部,是能夠 直接訪問對象的屬性 的
  2. 同一個類 建立的 多個對象 之間,屬性 互不干擾!

 

 

對象

03. 擺放傢俱

需求blog

  1. 房子(House) 有 戶型總面積 和 傢俱名稱列表
    • 新房子沒有任何的傢俱
  2. 傢俱(HouseItem) 有 名字 和 佔地面積,其中
    • 席夢思(bed) 佔地 4 平米
    • 衣櫃(chest) 佔地 2 平米
    • 餐桌(table) 佔地 1.5 平米
  3. 將以上三件 傢俱 添加 到 房子 中
  4. 打印房子時,要求輸出:戶型總面積剩餘面積傢俱名稱列表

 

 

開發

剩餘面積string

  1. 在建立房子對象時,定義一個 剩餘面積的屬性初始值和總面積相等
  2. 當調用 add_item 方法,向房間 添加傢俱 時,讓 剩餘面積 -= 傢俱面積

思考:應該先開發哪個類?

答案 —— 傢俱類

  1. 傢俱簡單
  2. 房子要使用到傢俱,被使用的類,一般應該先開發

3.1 建立傢俱

class HouseItem: def __init__(self, name, area): """ :param name: 傢俱名稱 :param area: 佔地面積 """ self.name = name self.area = area def __str__(self): return "[%s] 佔地面積 %.2f" % (self.name, self.area) # 1. 建立傢俱 bed = HouseItem("席夢思", 4) chest = HouseItem("衣櫃", 2) table = HouseItem("餐桌", 1.5) print(bed) print(chest) print(table) 

小結

  1. 建立了一個 傢俱類,使用到 __init__ 和 __str__ 兩個內置方法
  2. 使用 傢俱類 建立了 三個傢俱對象,而且 輸出傢俱信息

3.2 建立房間

class House: def __init__(self, house_type, area): """ :param house_type: 戶型 :param area: 總面積 """ self.house_type = house_type self.area = area # 剩餘面積默認和總面積一致 self.free_area = area # 默認沒有任何的傢俱 self.item_list = [] def __str__(self): # Python 可以自動的將一對括號內部的代碼鏈接在一塊兒 return ("戶型:%s\n總面積:%.2f[剩餘:%.2f]\n傢俱:%s" % (self.house_type, self.area, self.free_area, self.item_list)) def add_item(self, item): print("要添加 %s" % item) ... # 2. 建立房子對象 my_home = House("兩室一廳", 60) my_home.add_item(bed) my_home.add_item(chest) my_home.add_item(table) print(my_home) 

小結

  1. 建立了一個 房子類,使用到 __init__ 和 __str__ 兩個內置方法
  2. 準備了一個 add_item 方法 準備添加傢俱
  3. 使用 房子類 建立了 一個房子對象
  4. 讓 房子對象 調用了三次 add_item 方法,將 三件傢俱 以實參傳遞到 add_item 內部

3.3 添加傢俱

需求

  • 1> 判斷 傢俱的面積 是否 超過剩餘面積若是超過,提示不能添加這件傢俱
  • 2> 將 傢俱的名稱 追加到 傢俱名稱列表 中
  • 3> 用 房子的剩餘面積 - 傢俱面積
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 

3.4 小結

  • 主程序只負責建立 房子 對象和 傢俱 對象
  • 讓 房子 對象調用 add_item 方法 將傢俱添加到房子
  • 面積計算剩餘面積傢俱列表 等處理都被 封裝 到 房子類的內部
相關文章
相關標籤/搜索