Python: plusieurs appels à __init __ () sur la même instance
-
23-09-2019 - |
Question
La fonction __init__()
est appelée lorsque l'objet est créé.
Est-il correct d'appeler à nouveau une fonction __init__()
objet, après son été créé?
instance = cls(p1=1, p2=2)
# some code
instance.__init__(p1=123, p2=234)
# some more code
instance.__init__(p1=23, p2=24)
pourquoi serait __init__()
quiconque wanna appel sur un objet qui est déjà créé?
bonne question. Je veux réinitialiser les champs de l'instance.
La solution
Il est bien d'appeler __init__
plus d'une fois sur un objet, tant que __init__
est codé avec l'effet que vous souhaitez obtenir (quel qu'il soit). (! Alors vous feriez mieux __init__
code approprié -) Un cas typique où il se produit est lorsque la méthode de __new__
de votre classe renvoie une instance de la classe: que ne la cause __init__
d'être appelé à l'instance retournée ( pour ce qui pourrait être la deuxième ou vingtième, du temps, si vous continuez à « recyclage » des cas via votre __new__
-.)
Autres conseils
Vous pouvez, mais il est briser ce genre de __init__
est destiné à faire. Beaucoup de Python est vraiment juste convention, de sorte que vous pourriez suivre aussi bien et puis attendre __init__
seulement être appelé une fois. Je recommande la création d'une fonction appelée init
ou reset
ou quelque chose qui définit les variables d'instance, utilisez que lorsque vous souhaitez réinitialiser l'instance, et ont __init__
il suffit d'appeler init
. Cela ressemble certainement plus sain d'esprit:
x = Pt(1,2)
x.set(3,4)
x.set(5,10)
Pour autant que je sache, il ne pose pas de problème ( modifier: comme le suggère l'utilisation casher de super(...).__init__(...)
), mais je pense avoir une méthode de reset()
et de l'appeler à la fois dans __init__()
et quand vous devez réinitialiser serait plus propre.