Frage

Die __init__() Funktion aufgerufen wird, wenn das Objekt erstellt wird. Ist es in Ordnung, ein Objekt __init__() Funktion wieder aufzurufen, nach seiner erstellt?

instance = cls(p1=1, p2=2)
# some code
instance.__init__(p1=123, p2=234)
# some more code
instance.__init__(p1=23, p2=24)

Warum sollte jemand wollen Anruf __init__() auf ein Objekt, das bereits erstellt wird?

gute Frage. Ich will die Instanz Felder neu initialisieren.

War es hilfreich?

Lösung

Es ist in Ordnung, um den Anruf __init__ mehr als einmal auf einem Objekt, solange __init__ mit dem Effekt codiert wollen Sie erhalten (was auch immer das sein mag). Ein typischer Fall, in dem es passiert (!, So dass Sie entsprechend besseren Code __init__ würden -) ist, wenn __new__-Methode der Klasse gibt eine Instanz der Klasse: die nicht Ursache __init__ auf der zurückgegebene Instanz aufgerufen werden ( für das, was die zweite sein könnte, oder zwanzigste, Zeit, wenn Sie „Recycling“ Instanzen über Ihre __new__ halten -.)

Andere Tipps

Sie können, aber es ist eine Art zu brechen, was __init__ soll tun. Viele Python ist wirklich nur Konvention, so dass Sie auch dann folgen könnte und erwarten __init__ nur einmal aufgerufen werden. Ich würde empfehlen, eine Funktion namens init oder reset oder etwas zu schaffen, die die Instanzvariablen setzt, verwenden Sie, wenn Sie die Instanz zurücksetzen wollen, und haben __init__ nur init nennen. Das sieht auf jeden Fall mehr sane:

x = Pt(1,2)
x.set(3,4)
x.set(5,10)

Soweit ich weiß, es verursacht keine Probleme ( edit: , wie durch die koscher Nutzung von super(...).__init__(...) vorgeschlagen), aber ich denke, ein reset() Verfahren mit und es sowohl in __init__() Aufruf und wenn müssen Sie wäre sauberer zurückgesetzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top