組合就是, 一個類或一個類的對象中的某一個屬性, 這個屬性是另外一個類的對象python
用來解決類與類之間代碼冗餘的問題 (代碼重用性)app
組合和繼承都是有效的利用已有類的資源的重要方式, 但兩者的概念和使用場景不一樣code
# 人類 class Person: def __init__(self,name,age,sex): self.name =name self.age = age self.sex = sex def run(self): print(f"{self.name}跑起來") # 歌星類 class Start(Person): def sing(self): print("唱歌") # 詩人類 class Poet(Person): def write(self): print("寫詩") S1 = Start("毛不易",25,"man") P1 = Poet("李白",10000,"man") S1.run() # 毛不易跑起來 P1.run() # 李白跑起來
🍔下面這個例子就是"bank"類的對象做爲一個組件放置在其餘類或其餘類的對象中,成爲他們的屬性 🍔示例講解 : 餐廳裏有個員工和老闆, 老闆給員工發工資, 員工辦了張卡來收工資 class People: school = "蟹堡王餐廳" def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex class Staff(People): # 員工 bank_card = {} # 銀行卡 {xx銀行:餘額} def sell(self): print(f"{self.name}正在賣蟹堡") def apply_catd(self,card_name): # 辦銀行卡 self.bank_card[card_name] = 0 print(f"{self.name}辦了一張{card_name}卡") class Boss(People): # 老闆 def payoff(self,obj,obj_card_name,money): obj.bank_card.update({obj_card_name:money}) print(f"老闆{self.name}給{obj.name}的{obj_card_name}卡打了{money}元工資") class Bank: # 出卡的類 def __init__(self,bank_name): self.bank_name = bank_name # 實例出銀行卡 card1 = Bank("蟹堡銀行") # 實例出一個員工 S1 = Staff("派大星",35,"man") # 實例老闆 B1 = Boss("姍姍",30,"woman") # 員工辦卡 S1.apply_catd(card1.bank_name) # 老闆給員工發工資 B1.payoff(S1,"蟹堡銀行",300) # 查看員工的工資卡字典 print(S1.bank_card) '''執行輸出 派大星辦了一張蟹堡銀行卡 老闆姍姍給派大星的蟹堡銀行卡打了300元工資 {'蟹堡銀行': 300} '''