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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top