# 組合: 給一個(gè)類的對象封裝一個(gè)屬性,這個(gè)屬性是另一個(gè)類的對象.
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)
p1.attack(p2)?# 蓋倫 攻擊 亞索,亞索 掉了20血,還剩180血
p2.attack(p1)?# 亞索 攻擊 蓋倫,蓋倫 掉了50血,還剩450血
p1.armament_weapon(axe)
p1.wea.fight(p1, p2)?# 蓋倫 用倚天劍打了亞索,亞索 掉了60血,還剩120血
p2.armament_weapon(broadsword)
p2.wea.fight(p2, p1)?# 亞索 用屠龍刀打了蓋倫,蓋倫 掉了100血,還剩350血
注意:
????1.查詢順序:
????????對象.屬性:先從對象空間找,如果找不到英上,再從類空間找赏殃,再找不到倍踪,再從父類找是牢。痴荐。烘豌。
????????類名.屬性:先從本類空間找华蜒,如果找不到辙纬,再從父類找,叭喜。贺拣。。
????2.對象與對象之間是互相獨(dú)立的域滥。
????3.通過類名可以直接更改本類中的靜態(tài)變量值
????4.但是通過對象不能改變本類中的靜態(tài)變量值纵柿,只能引用類中的靜態(tài)變量。
????5.類名()產(chǎn)生了一個(gè)(含有類對象指針的)空間启绰,所以昂儒,對象可以訪問類中的靜態(tài)變量和動(dòng)態(tài)變量。