Python面向對象之組合

# 組合: 給一個類的對象封裝一個屬性,這個屬性是另外一個類的對象.


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.類名()產生了一個(含有類對象指針的)空間,因此,對象能夠訪問類中的靜態變量和動態變量。

 

相關文章
相關標籤/搜索