(non sono in grado di trovare un punto di riferimento da nessuna parte su questa materia dopo un po 'Googling.)Quando chiamare Python super() .__ init __()?
Lo scenario può essere chiaramente dimostrato con questo esempio di codice breve:
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)
Utilizzando CPython 3.x, quanto sopra esempio di codice funziona - supponendo che esista call_another_method()
. Questo stile di codifica è generalmente sicuro, ma disapprovato o considerato unpitonico? Non riesco a trovare consigli su questo argomento.
Perché mi interessa?
Il mio background deriva da linguaggi di programmazione orientati agli oggetti più tradizionali come C++, C# e Java, dove "super" deve essere chiamato rigorosamente come prima istruzione in un costruttore sottoclasse - ignorando il caso implicito zero-argument.
Se è importante, sono un giovane pitone: 3+, per favore.
IIRC, in Python 3.x, non hai più bisogno di chiamare 'super (ClassName, self)', 'super()' funziona da solo. –
L'unica cosa che 'super' in Java e Python hanno in comune è il nome. Java 'super' è una parola chiave che fa riferimento alla (sola) classe base; Python 'super' è una funzione built-in che, utilizzando i suoi argomenti, restituisce un oggetto che funge da proxy per alcune classi nell'ordine di risoluzione dei metodi di un oggetto. – chepner
@ChinmayKanchi: Grazie per il suggerimento. Aggiornerò il mio codice andando avanti! – kevinarpe