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是攻擊的主體