Python 中的多重繼承

Ishaan Shrivastava 2021年7月10日
Python 中的多重繼承

繼承允許我們在子類中使用父類的特性,它是物件導向程式設計的一個基本特性。它有助於從父類到子類的資料的可重用性和可傳遞性,並補償資料丟失。

多重繼承是指子類從兩個或多個父類繼承方法和功能。一次匯出所有資料是有益的。儘管如此,另一方面,它帶來了使用的複雜性和歧義。如果多個父母擁有相同的特徵,那麼分辨哪個特徵來自哪個父母是不明確的。它發生在未正確使用或實現多重繼承時。虛擬繼承、方法解析順序 (MRO) 的使用和 super() 函式可以以某種方式降低其風險。

我們在以下程式碼中看到了多重繼承的基本示例。

class Father():
    def drive(self):
        print("Father drives his son to school")

class Mother():
    def cook(self):
        print("Mother loves to cook for her son")

class Son(Father, Mother):
    def love(self):
        print("I love my Parents")
    
c=Son()
c.drive()
c.cook()
c.love()

輸出:

Father drives his son to school
Mother loves to cook for her son
I love my parents

子類 Son 派生自父類 FatherMother,這允許它使用函式 drive()cook() 來提供所需的輸出。

super() 函式引用繼承子類中的父類或兄弟類,並返回一個臨時物件,該物件允許子類使用所有超類方法。

這通常是在繼承開始跨越路徑時出現歧義的情況下完成的,即當兩個父類也從超級基類派生時。

例如,

class Animals:
    def __init__(self, animalsName):
        print(animalsName, 'is an animal.');


class Mammal(Animals):
    def __init__(self, Name):
        print(Name, 'is a mammal.')
        super().__init__(Name)
    

class donotFly(Mammal):
      def __init__(self, name):
        print(name, "cannot fly.")
        super().__init__(name)


class donotSwim(Mammal):
    def __init__(self, name):
        print(name, "cannot swim.")
        super().__init__(name)


class Cat(donotSwim, donotFly):
    def __init__(self):
        print('A cat.');
        super().__init__('Cat')

cat = Cat()
print('')
bat = donotSwim('Bat')

輸出:

A cat.
Cat cannot swim.
Cat cannot fly.
Cat is a mammal.
Cat is an animal.

Bat cannot swim.
Bat is a mammal.
Bat is an animal.

建立了一個子類 Cat,由兩個父類 donotswimdonotfly 繼承。然後,哺乳動物類自己繼承它們。Mammals 類還繼承了超類 Animals 的屬性。因此,在這種情況下,我們使用 super() 函式來輕鬆訪問超類方法。

相關文章 - Python Class