python面向對象之類的組合

1、python類的組合:給一個類的對象封裝一個屬性,這個屬性是另外一個類的對象
2、組合的意義:讓類的對象與另外一個類的對象產生關係,類與類之間產生關係。
3、例子
模擬英雄聯盟寫一個遊戲人物的類
要求:
(1)建立一個 Game_role的類.
(2)構造方法中給對象封裝 name,ad(攻擊力),hp(血量).三個屬性.
(3)再建立一個武器類Weapen,構造方法中給對象封裝 武器名、武器攻擊力兩個屬性
(4)武器類還有一個攻擊方法用來完成攻擊的功能。
總體實現的是:
  實例化一個對象 蓋倫,ad爲69, hp爲500
  實例化另個一個對象 亞索 ad爲76, hp爲400
  實例化蓋倫的武器: 大寶劍,武器攻擊力40
  實例化 亞索的武器:武士刀,武器攻擊力60
  蓋倫經過attack方法攻擊劍豪,此方法要完成 '誰用什麼武器攻擊了誰,誰掉了多少血, 還剩多少血'的提示功能.
python

 

複製代碼
class Game_role:

    def __init__(self,name,ad,hp):
        self.name = name
        self.ad = ad
        self.hp = hp

    def use_weapen(self,w):
        self.weapen = w


class Weapen:

    def __init__(self,weapen_name,weapen_ad):
        self.weapen_name = weapen_name
        self.weapen_ad = weapen_ad

    def attack(self,role1,role2):
        role2.hp = role2.hp - role1.ad - self.weapen_ad
        msg = '{}用{}攻擊了{},{}掉了{}血,還剩{}血'.\
             format(role1.name,self.weapen_name,role2.name,role2.name,(role1.ad + self.weapen_ad),role2.hp)
        print(msg)

# 實例化兩我的物對象
p1 = Game_role('蓋倫',69,500)
p2 = Game_role('亞索',76,400)

#實例化兩把武器
w1 = Weapen('大寶劍',50)
w2 = Weapen('孤兒劍',60)

# 這樣直接調用Weapen的方法雖然能夠實現,可是這樣實現的話,主體誰攻擊誰不能一目瞭然
w1.attack(p1,p2)        #蓋倫用大寶劍攻擊了亞索,亞索掉了119血,還剩281血


# 因此,這時候就須要用到類的組合,在人物對象中設置一個屬性,把武器類的對象傳進去,
# 再使用這個屬性調用攻擊方法,就能夠知道誰發起的攻擊,一目瞭然
# 因此此時要在人物類中設置一個方法(use_weapen),用於給人物對象設置武器的屬性
# 這樣就能夠一目瞭然知道誰是攻擊的主體

p1.use_weapen(w1)            #把w1這個對象賦給p1的一個屬性(weapen) 至關於 p1.weapen = w1
p1.weapen.attack(p1,p2)    # 經過p1.weapen調用attack方法 至關於 w1.attcak(p1,p2)

# 這樣就能夠一目瞭然知道p1是攻擊的主體
複製代碼

 

相關文章
相關標籤/搜索