python全棧開發-面向物件-初識2 python_17_day
阿新 • • 發佈:2018-12-16
今日主要內容:
- 1.類空間,物件空間,查詢順序.
- 2.組合.
1.類空間,物件空間,查詢順序.
class Person: animal = '高階動物' soul = '有靈魂' language = '語言' def __init__(self, country, name, sex, age, hight): self.country = country self.name = name self.sex = sex self.age = age self.hight = hight def eat(self): print('%s吃飯' % self.name) def sleep(self): print('睡覺') def work(self): print('工作') Person.__dict__['sleep'](111) p1 = Person('菲律賓','alex','未知',42,175) p2 = Person('菲律賓','alex','未知',42,175) p3 = Person('菲律賓','alex','未知',42,175) p1.animal = '禽獸' print(p1.animal) print(Person.name) p2 = Person('美國','武大','男',35,160)
查詢順序: 物件.屬性 : 先從物件空間找,如果找不到,再從類空間找,再找不到,再從父類找.... 類名.屬性 : 先從本類空間找,如果找不到,再從父類找.... 物件與物件之間是互相獨立的. 2.組合 組合: 給一個類的物件封裝一個屬性,這個屬性是另一個類的物件.
**模擬英雄聯盟寫一個遊戲人物的類(升級題).(見昨日作業) 要求: (1)建立一個 Game_role的類. (2) 構造方法中給物件封裝name,ad(攻擊力),hp(血量).三個屬性. (3) 建立一個attack方法,此方法是例項化兩個物件,互相攻擊的功能: 例: 例項化一個物件 蓋倫,ad為10, hp為100 例項化另個一個物件 劍豪 ad為20, hp為80 蓋倫通過attack方法攻擊劍豪,此方法要完成 '誰攻擊誰,誰掉了多少血, 還剩多少血'的提示功能.
版本一:新增武器:斧子,刀,槍,棍,棒...,
class GameRole: def __init__(self, name, ad, hp): self.name = name self.ad = ad self.hp = hp def attack(self,p): p.hp = p.hp - self.ad print('%s 攻擊 %s,%s 掉了%s血,還剩%s血' %(self.name,p.name,p.name,self.ad,p.hp)) class Weapon: def __init__(self,name,ad): self.name = name self.ad = ad def fight(self,p1,p2): p2.hp = p2.hp - self.ad print('%s 用%s打了%s,%s 掉了%s血,還剩%s血'\ % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp)) p1 = GameRole('張三',20,500) p2 = GameRole('李四',50,200) axe = Weapon('三板斧',60) broadsword = Weapon('屠龍寶刀',100) axe.fight(p1,p2) broadsword.fight(p2,p1) p1.attack(p2)
程式碼不合理: 人物利用武器攻擊別人,你的動作發起者是人,而不是武器. 版本二:
class GameRole: def __init__(self, name, ad, hp): self.name = name self.ad = ad self.hp = hp def attack(self,p): p.hp = p.hp - self.ad print('%s 攻擊 %s,%s 掉了%s血,還剩%s血' %(self.name,p.name,p.name,self.ad,p.hp)) def armament_weapon(self,wea): self.wea = wea class Weapon: def __init__(self,name,ad): self.name = name self.ad = ad def fight(self,p1,p2): p2.hp = p2.hp - self.ad print('%s 用%s打了%s,%s 掉了%s血,還剩%s血'\ % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp)) p1 = GameRole('張三',20,500) p2 = GameRole('李四',50,200) axe = Weapon('三板斧',60) broadsword = Weapon('屠龍寶刀',100) # print(axe) p1.armament_weapon(axe) # 給張三 裝備了三板斧這個物件. # print(p1.wea) # print(p1.wea.name) # print(p1.wea.ad) p1.wea.fight(p1,p2)