# 組合: 給一個類的對象封裝一個屬性,這個屬性是另外一個類的對象. 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.對象與對象之間是互相獨立的。 3.經過類名能夠直接更改本類中的靜態變量值 4.可是經過對象不能改變本類中的靜態變量值,只能引用類中的靜態變量。 5.類名()產生了一個(含有類對象指針的)空間,因此,對象能夠訪問類中的靜態變量和動態變量。