Ein Weg besteht darin, den Konstruktor von A aufzurufen und self
als Argument zu übergeben, wie folgt:
class B(A):
def __init__(self):
A.__init__(self)
print "Hallo"
Der Vorteil dieses Stils ist, dass er sehr klar ist. Er ruft den Initialisierer von A auf. Der Nachteil ist, dass er die Vererbung in Form von Diamanten nicht sehr gut handhabt, da Sie möglicherweise den Initialisierer der gemeinsamen Basisklasse zweimal aufrufen.
Ein anderer Weg ist die Verwendung von super(), wie es andere gezeigt haben. Bei einfacher Vererbung tut es im Grunde dasselbe wie das Aufrufen des Initialisierers des Elternteils.
Allerdings ist super() unter der Oberfläche ziemlich kompliziert und kann in Situationen mit mehrfacher Vererbung manchmal gegen die Intuition sein. Auf der positiven Seite kann super() dazu verwendet werden, Vererbung in Form von Diamanten zu handhaben. Wenn Sie die genauen Einzelheiten davon erfahren möchten, was super() macht, ist die beste Erklärung, die ich für die Funktionsweise von super() gefunden habe, hier (obwohl ich nicht unbedingt die Meinungen des Artikels befürworte).
1 Stimmen
Sie sollten betonen, dass Sie eine Antwort möchten, die den abgeleiteten Klassennamen nicht verwendet. z.B. (Pseudocode):
super().__init__(args...)
1 Stimmen
Du solltest Aidan Gomez Antwort akzeptieren. Es würde uns viel Zeit sparen, da sie eine Antwort sowohl in Python 2 als auch in 3 hat.
1 Stimmen
Python 2 wird nicht mehr offiziell unterstützt. Auch seine Antwort kam 5 Jahre später.
1 Stimmen
@Mike Ich denke, es gibt immer noch Wert in einer Antwort, die den Python 2 Weg auflistet, denn es gibt noch viel alten Python 2 Code da draußen, und einige der Leute, die auf diese Frage stoßen, werden wahrscheinlich sonst nicht wissen, wie sie damit umgehen sollen. (Und trotz des Endes der Lebensdauer schreiben viele Leute tatsächlich immer noch Code in Python 2, entweder weil sie es nicht besser wissen oder weil es ihnen von organisatorischen Anforderungen auferlegt wurde.)
1 Stimmen
Ich habe die angenommene Antwort auf die Antwort von @Aiden Gomez geändert. Obwohl Ignacio richtig lag, war Aidans Antwort aufgrund der Änderungen von
super()
in Python 3 heute am angemessensten.