多重繼承如何影響 Python super() 的行為
Python 中的多重繼承引入了方法解析的複雜性。 Python 決定方法解析順序 (MRO) 來決定 super() 應該呼叫哪個父方法。
在您的例子中,Third 繼承自 First 和 Second。當在 Third.__init__() 中呼叫 super().__init__() 時,它會引用 First.__init__(),因為 MRO 從左到右評估父類別。在繼承鏈中,First 列在 Second 之前。
Python 在建構 MRO 時優先考慮繼承清單中的類別順序。因此,在下面的範例中,MRO 是[Fourth, Second, Third, First, object]:
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")
在這種情況下,Fourth 將呼叫First.__init__() 而不是Second.__init__ ()因為在MRO中先遇到First。
但是,如果繼承順序是反轉:
class Third(Second, First): def __init__(self): print("third")
然後,MRO 變成 [Third, Second, First, object],Third 最初會呼叫 Second.__init__()。
值得注意的是,Python 強制執行連貫的 MRO 。如果繼承鏈中存在不一致,則會引發異常以防止意外行為。
以上是Python的`super()`如何解多重繼承中的方法呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!