Python: più chiamate a __init __ () sulla stessa istanza
-
23-09-2019 - |
Domanda
La funzione __init__()
viene chiamato quando viene creata oggetto.
E 'ok per chiamare di nuovo una funzione oggetto __init__()
, dopo il suo stato creato?
instance = cls(p1=1, p2=2)
# some code
instance.__init__(p1=123, p2=234)
# some more code
instance.__init__(p1=23, p2=24)
Perché qualcuno vuole chiamata __init__()
su un oggetto che è già creato?
buona domanda. Voglio re-inizializzare i campi dell'istanza.
Soluzione
E 'bene chiamare __init__
più di una volta su un oggetto, a patto che __init__
è codificato con l'effetto che si vuole ottenere (qualunque esso sia). (! Quindi è meglio codice __init__
modo appropriato -) Un caso tipico in cui accade è quando il metodo __new__
della vostra classe restituisce un'istanza della classe: che fa causa __init__
di essere chiamato sul istanza restituita ( per quello che potrebbe essere il secondo, o il ventesimo, il tempo, se si mantiene "riciclaggio" istanze tramite il vostro __new__
-!).
Altri suggerimenti
È possibile, ma è una specie di rompere ciò che __init__
è destinato a fare. Un sacco di Python è in realtà solo convenzione, così si potrebbe anche seguire poi e si aspettano __init__
di essere chiamato solo una volta. Mi consiglia la creazione di una funzione chiamata init
o reset
o qualcosa che imposta le variabili di istanza, uso che quando si desidera ripristinare l'istanza, e hanno __init__
basta chiamare init
. Questo sembra decisamente più sano di mente:
x = Pt(1,2)
x.set(3,4)
x.set(5,10)
Per quanto ne so, non causa alcun problema ( modifica: come suggerito dall'uso kosher di super(...).__init__(...)
), ma penso che avere un metodo reset()
e chiamandolo sia in __init__()
e quando è necessario reimpostare sarebbe più pulito.