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.
objectfosse un errore di battitura. Ma ora non hai nemmeno ilsupertitolo della tua domanda a cui si riferisce.