1.封裝 是面向對象編程的一大特色 2.面向對象編程的第一步 —— 將屬性和方法封裝到一個抽象的類中 3.外界使用類建立對象,而後讓對象調用方法 4.對象方法的細節 都被封裝在類的內部
需求 1.小明體重 75.0 公斤 2.小明每次跑步會減肥 0.5 公斤 3.小明每次吃東西體重增長 1 公斤 Person ------------------- name weight -------------------
_init_(self,name,weight):
_str_(self):
run(self):
eat(self):
-------------------
class Person: def __init__(self,name,weight): # self.屬性 = 形參 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.0) xiaoming.run() xiaoming.eat() print(xiaoming)
2.1 小明愛跑步擴展 —— 小美也愛跑步編程
需求 1.小明和小美都愛跑步 2.小明體重 75.0 公斤 3.小美體重 45.0 公斤 4.每次跑步都會減小 0.5 公斤 5.每次吃東西都會增長 1 公斤
提示
1.在對象的方法內部,是能夠直接訪問對象的屬性的
2.同一類建立的多個對象之間,屬性互不干擾!
class Person: def __init__(self,name,weight): # self.屬性 = 形參 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.0) xiaoming.run() xiaoming.eat() print(xiaoming) # 小美愛跑步 xiaomei = Person("小美",45) xiaomei.eat() xiaomei.run() print(xiaomei)
需求 1.房子(House)有戶型,總面積和家居名稱列表 新房子沒有任何傢俱 2.傢俱(HouseItem)有名字和佔地面積,其中 席夢思(bed)佔地 4 平米 衣櫃(chest)佔地 2 平米 餐桌(table)佔地 1.5平米 3.將以三件傢俱添加到房子中 4.打印房子時,要求輸出:戶型、總面積、剩餘面積、家居名稱列表
剩餘面積 1.在建立房子對象時,定義一個剩餘面積的屬性、初始值和總面積相等 2.當調用 add_item 方法,向房間添加傢俱時,讓剩餘面積 -= 傢俱面積
應該先開發 傢俱類
1.傢俱簡單
2.房子要使用到傢俱,被使用的類,一般應該先開發
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): # 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) # 1.建立傢俱 bed = HouseItem("席夢思",4) chest = HouseItem("衣櫃",2) table = HouseItem("餐桌",1.5) print(bed) print(chest) print(table) # 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 添加傢俱app
需求 1>判斷傢俱的面積是否超過剩餘面積,若是超過,提示不能添加這件家居 2>將傢俱的名稱追加到家居名稱列表中 3>用房子的剩餘面積 * 傢俱面積
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): # 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) # 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("兩室一廳",60) my_home.add_item(bed) my_home.add_item(chest) my_home.add_item(table) print(my_home)
3.4 小結spa
主程序只負責建立房子對象和加重對象code
讓房子對象調用 add_item方法將傢俱添加到房子中對象
面積計算、剩餘面積、傢俱列表等處理都被封裝到房子類的內部blog