首頁 >後端開發 >Python教學 >Python多重繼承中`super()`如何解決方法呼叫?

Python多重繼承中`super()`如何解決方法呼叫?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-27 10:33:14192瀏覽

How Does `super()` Resolve Method Calls in Python Multiple Inheritance?

Python 多重繼承中的 Super()

Python 中的多重繼承帶來了 super() 如何與其互動的問題。考慮下面的程式碼:

class First(object):
    def __init__(self):
        print("first")

class Second(object):
    def __init__(self):
        print("second")

class Third(First, Second):
    def __init__(self):
        super(Third, self).__init__()
        print("that's it")

現在, super().__init__ 引用了 Third 的哪個父方法?你能選擇運行哪一個嗎?

為了在這種情況下理解 super(),我們深入研究方法解析順序 (MRO) 的概念。在 Python 中,MRO 定義了涉及多重繼承時解析方法的順序。

在我們的範例中,Third() 將會呼叫 First.__init__。 Python 從左到右檢查類別父類別中的每個屬性。對於 __init__,Python 首先在 First 中查找,如果在那裡沒有找到,則在 Second 中檢查。

隨著繼承的交織,情況變得更加複雜。請閱讀 Guido 關於 MRO 的部落格文章以了解更多相關資訊。然而,Python 通常會保持所寫的繼承順序,從子類別本身開始。

考慮以下範例:

class First(object):
    def __init__(self):
        print("first")

class Second(First):
    def __init__(self):
        print("second")

class Third(First):
    def __init__(self):
        print("third")

class Fourth(Second, Third):
    def __init__(self):
        super(Fourth, self).__init__()
        print("that's it")

這裡,MRO 將是 [第四,第二,第三,第一]。

需要注意的是,如果Python無法確定一致的MRO,它會引發異常,而不是訴諸潛在的意外

此外,值得一提的是,提供的示例不使用super() 調用。它們的目的是演示 MRO 的建造方式,而不是列印特定的輸出。我們鼓勵您嘗試 super() 調用,以更深入地了解 Python 的繼承模型。

以上是Python多重繼承中`super()`如何解決方法呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn