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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top