Python: mehrere Aufrufe __init __ () auf der gleichen Instanz
-
23-09-2019 - |
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.
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.