透過多重繼承呼叫父類別init
在使用多重繼承的場景中,確保呼叫所有父類別構造函數。兩種常見的方法有:
-
ParentClass.__init__(self)(舊式)
-
super(DerivedClass, self).__it__() (較新風格)
但是,如果父類不遵循一致的約定,這些方法可能會失敗。
確定正確的方法
適當的方法取決於基類是否設計為多重繼承:
1。獨立基底類別
- 不適合多重繼承。
-
使用下列任一方法手動呼叫每個父建構子:
-
沒有super: Foo.__init__(self), Bar.__init__ (self)
-
與super: super().__init__() (對於Foo 之前的所有建構子),super(Foo, self).__init__(bar) (對於Foo 之後的所有建構子)
2. Mixins
- 專為多重繼承而設計。
- 在 mixin 類別中使用 super().__init__(),它會自動呼叫下一個建構子。
- 先繼承 mixin,例如 class FooBar(FooMixin,吧)。
3。為協作繼承而設計的類別
- 與 mixin 類似,但所有參數都作為關鍵字參數傳遞。
- 在所有類別中呼叫 super().__init__()。
- 基類的順序不
其他注意事項
- 對於物件子類,避免調用super().__init__ ()。
- 對於獨立類,如果直接從物件繼承,則總是提供一個空建構函式(例如,class Base(object): def __init__(self): pass)。
最終,正確的實作取決於所涉及的類別。如果一個類別是為多重繼承而設計的,則應該相應地記錄它。否則,假設它不是為此類場景設計的。
以上是如何在多重繼承中正確呼叫父類別 __init__` 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!