(Ich bin nicht in der Lage einen Verweis überall in dieser Angelegenheit nach einiger googeln zu finden.)Wann Python Super() .__ Init __() aufrufen?
Das Szenario kann eindeutig mit diesem kurzen Codebeispiel demonstriert werden:
class X:
def __init__(self, stuff):
self.__stuff = stuff
class Y(X):
def __init__(self, stuff):
# Is it safe to execute statements before calling super.__init__()?
new_stuff = self.call_another_method(stuff)
super(Y, self).__init__(new_stuff)
CPython 3.x verwenden, die oben Codebeispiel funktioniert - vorausgesetzt, call_another_method()
existiert. Ist dieser Codierungsstil generell sicher, aber verpönt oder unpythonisch? Ich kann in dieser Angelegenheit keinen Rat finden.
Warum interessiert mich das?
Mein Hintergrund kommt von traditionelleren objektorientierten Programmiersprachen wie C++, C# und Java, wobei "super" strikt als die erste Anweisung in einem Unterklassenkonstruktor bezeichnet werden muss, wobei der implizite Null-Argument-Fall ignoriert wird.
Wenn es darauf ankommt, bin ich jung Pythoneer: 3+, bitte.
IIRC, in Python 3.x musst du 'super (ClassName, self)' nicht mehr aufrufen, 'super()' funktioniert ganz gut. –
Über das einzige, was 'super' in Java und Python gemeinsam ist, ist der Name. Java 'super' ist ein Schlüsselwort, das die (einzige) Basisklasse referenziert; Python 'super' ist eine integrierte Funktion, die mithilfe ihrer Argumente ein Objekt zurückgibt, das als Proxy für eine Klasse in der Methodenauflösungsreihenfolge eines Objekts dient. – chepner
@ChinmayKanchi: Danke für den Tipp. Ich werde meinen Code in Zukunft aktualisieren! – kevinarpe