Python:在同一个实例上多次调用__init __()

时间:2010-01-27 06:31:46

标签: python initialization

创建对象时会调用__init__()函数。 可以在创建对象后再次调用对象__init__()吗?

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

为什么有人想在已经创建的对象上调用__init__()

好的问题。我想重新初始化实例的字段。

3 个答案:

答案 0 :(得分:11)

只要__init__用您想要获得的效果(无论可能是什么)编码,就可以在一个对象上多次调用__init__。发生这种情况的典型情况(所以你最好适当地编写__init__代码! - )是你的类的__new__方法返回类的一个实例: 导致{ {1}}要在返回的实例上调用(如果您通过__init__保留“回收”实例,可能是第二个或第二十个时间! - )。

答案 1 :(得分:3)

你可以,但它打破了__init__打算做的事情。很多Python实际上只是惯例,所以你也可以遵循它,并期望__init__只被调用一次。我建议创建一个名为initreset的函数或者设置实例变量的函数,当你想重置实例时使用它,让__init__只调用init }。这绝对看起来更健全:

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

答案 2 :(得分:1)

据我所知,它不会导致任何问题(编辑:,正如super(...).__init__(...)的犹太使用所建议的那样),但我认为采用reset()方法并且在__init__()中调用它并且当你需要重置时会更干净。