Sto creando una GUIclass che utilizza Frame() come classe base.Classi Python: Ereditarietà vs Istanziazione
Nel mio metodo init di GUIclass voglio creare un widget frame
In questo momento ho:
class GUIclass(Frame):
def __init__(self, parent):
frame = Frame(self, parent)
Ma ho visto questo altrove per la terza linea:
Frame.__init__(self, parent)
Sono un neofita della programmazione, python e sicuramente ereditarietà e volevo sapere se ho compreso correttamente la differenza tra i due. Ho fatto molte ricerche e letture, lo prometto, ma non sono riuscito a trovare nulla che lo rendesse completamente chiaro:
Nella prima situazione non chiamo il metodo init come ho creato un oggetto Frame (frame) e quando viene creato un oggetto, il suo metodo init viene chiamato implicitamente da python.
Nel secondo scenario, si chiama il metodo init sulla classe (che credo sia del tutto legittimo?) Perché non è stato creato un oggetto Frame, pertanto non lo farebbe automaticamente.
È giusto?
Ho visto anche:
frame = Frame.__init__(self, parent)
che in realtà mi ha buttato fuori. È solo qualcuno che fa qualcosa di ridondante o c'è una ragione per questo?
Grazie per il vostro aiuto, voglio prenderlo lentamente per ora e assicurarmi di comprendere appieno ogni riga di codice che scrivo mentre vado piuttosto che scrivere e far girare un intero programma che ho capito a metà.
Si consiglia di utilizzare il secondo: 'Telaio .__ init __ (self, genitore)' –
Il primo è semplicemente non corretta in quanto crea un inutile frame nell'inizializzatore di un oggetto basato su frame. –
Il secondo e il terzo sono super chiamate all'inizializzatore padre nel frame, in modo tale che l'inizializzatore della classe figlio estenderà le basi, non sovrascrive le basi. Ma non è necessario assegnare il risultato di una super chiamata rendendo il terzo errato. –