🍖類的組合

一.什麼是類的組合

組合就是, 一個類或一個類的對象中的某一個屬性, 這個屬性是另外一個類的對象python

二.爲何使用組合

用來解決類與類之間代碼冗餘的問題 (代碼重用性)app

三.組合與繼承的區別

組合和繼承都是有效的利用已有類的資源的重要方式, 但兩者的概念和使用場景不一樣code

1.繼承方式

  • 繼承是一種 "是" (屬於) 的關係, 詩人是人, 歌星是人, 當類之間有不少相同的之處,應該使用繼承
# 人類
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()  # 李白跑起來

2.組合方式

  • 組合是一種 "有" 的關係, 例:我有工做、有房子, 銀行卡有轉帳、存儲功能, 我能夠擁有一張銀行卡做爲個人組件
  • 當類之間有顯著不一樣,而且較小的類是較大的類所須要的組件時,用組合比較好
🍔下面這個例子就是"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}
'''
相關文章
相關標籤/搜索