Nella risposta di Anon:
"Se hai bisogno di qualcosa di super __init__
da fare in aggiunta a ciò che viene fatto nelle lezioni attuali __init__
, devi chiamarlo tu stesso, dal momento che ciò non accadrà automaticamente"
È incredibile: sta formulando esattamente il contrario del principio di eredità.
Non è che "qualcosa del super __init__
(...) non accadrà automaticamente" , è che DOVREBBE accadere automaticamente, ma non succede perché la classe base " __init__
è sostituita dalla definizione del clas derivato__init__
Quindi, PERCHÉ definire un deriv_class ' __init__
, dal momento che ignora ciò a cui si rivolge quando qualcuno ricorre all'eredità ??
È perché bisogna definire qualcosa che NON viene fatto nella classe base ' __init__
, e l'unica possibilità per ottenerlo è quella di mettere la sua esecuzione in una __init__
funzione di classe derivata .
In altre parole, uno ha bisogno di qualcosa nella classe base ' __init__
in aggiunta a ciò che verrebbe fatto automaticamente nella classe base' __init__
se quest'ultima non fosse sostituita.
NON il contrario.
Quindi, il problema è che le istruzioni desiderate presenti nella classe base ' __init__
non vengono più attivate al momento dell'istanza. Per compensare questa inattivazione, è necessario qualcosa di speciale: chiamare esplicitamente la classe base ' __init__
, per MANTENERE , NON AGGIUNGERE, l'inizializzazione eseguita dalla classe base' __init__
. Questo è esattamente ciò che si dice nel documento ufficiale:
Un metodo prioritario in una classe derivata potrebbe infatti voler estendere piuttosto che semplicemente sostituire il metodo della classe base con lo stesso nome. Esiste un modo semplice per chiamare direttamente il metodo della classe di base: basta chiamare BaseClassName.methodname (sé, argomenti).
http://docs.python.org/tutorial/classes.html#inheritance
Questa è tutta la storia:
quando l'obiettivo è MANTENERE l'inizializzazione eseguita dalla classe base, ovvero pura eredità, non è necessario nulla di speciale, si deve semplicemente evitare di definire una __init__
funzione nella classe derivata
quando l'obiettivo è SOSTITUIRE l'inizializzazione eseguita dalla classe base, __init__
deve essere definita nella classe derivata
quando lo scopo è quello di AGGIUNGERE i processi all'inizializzazione eseguita dalla classe base, è __init__
necessario definire una classe derivata " , comprendente una chiamata esplicita alla classe base__init__
Quello che mi sembra sorprendente nel post di Anon non è solo il fatto che esprima il contrario della teoria dell'eredità, ma che ci siano stati 5 ragazzi che lo hanno votato senza girare i capelli, e inoltre non c'è stato nessuno a cui reagire in 2 anni una discussione il cui argomento interessante deve essere letto relativamente spesso.
object
fosse un errore di battitura. Ma ora non hai nemmeno ilsuper
titolo della tua domanda a cui si riferisce.