Python多重繼承中,super init 方法為何需要傳入更多形參

時間 2021-05-31 11:18:05

1樓:靈劍

你這個沒理解到正確的方向上,super().__init__()實際上是呼叫的基類的__init__,你的基類(Base1,Base2)的__init__不接受引數,自然你給它引數就會報錯了。基類的__init__和派生類的__init__是不同的方法,不一定要接受相同的引數,你在派生類中呼叫基類的__init__也完全沒必要傳相同的引數列表,對你的例子來說,直接把super().

__init__()中間的引數去掉就行了。

super().__init__()其實沒有什麼神秘的,多繼承的時候它會呼叫__mro__中間更靠上的乙個,這樣MyClass呼叫Base2,Base2呼叫Base1(注意雖然Base2的基類是BaseBase,但是__mro__的順序是BaseBase, Base1, Base2, MyClass),Base1呼叫BaseBase。遇到問題不要一上來就瞎猜,打下日誌很容易就能找到證據了。

Python 的縮排有多重要?

東東 非常重要。是Python的語法規則,必須遵守,否則就出錯。所以不是什麼坑,是你不了解和尊重這個規則而已。每種程式語言都有自己既定的規則,依靠這些規則和它們提供的其他東西,構建出程式,從而實現解決特定問題,這就是程式設計的目的。你非要不遵守基本規則去編寫,出了問題,其實當然還是自己的問題。這不是...

python中,例項化乙個類,和繼承乙個類,都適用什麼場景,有什麼場景就只能用其一麼?

Annie拉拉 例項化是用到了類的封裝特性,例項化後就可以復用裡面的某個方法,而不必自己重複造輪子。繼承是用到類的繼承特性,創造類很大程度是為了繼承,此時呼叫的是類裡面幾乎所有方法 可以改寫 多型 類本身封裝的屬性和方法都是有關聯甚至有步驟的,指向更龐大的特性和功能,封裝層次越高復用性越低,所以類的...

python 中關於serve forever函式

文刀天可 我的理解是serve socketserver使用多執行緒的話,應該是要使用 ThreadingTCPServer這個類,這個類繼承了ThreadingMixIn類和TCPServer類,其中ThreadingMixIn類才是處理執行緒的,而serve forever是通過TCPServe...