创建对象时会调用__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__()
?
答案 0 :(得分:11)
只要__init__
用您想要获得的效果(无论可能是什么)编码,就可以在一个对象上多次调用__init__
。发生这种情况的典型情况(所以你最好适当地编写__init__
代码! - )是你的类的__new__
方法返回类的一个实例: 导致{ {1}}要在返回的实例上调用(如果您通过__init__
保留“回收”实例,可能是第二个或第二十个时间! - )。
答案 1 :(得分:3)
你可以,但它打破了__init__
打算做的事情。很多Python实际上只是惯例,所以你也可以遵循它,并期望__init__
只被调用一次。我建议创建一个名为init
或reset
的函数或者设置实例变量的函数,当你想重置实例时使用它,让__init__
只调用init
}。这绝对看起来更健全:
x = Pt(1,2)
x.set(3,4)
x.set(5,10)
答案 2 :(得分:1)
据我所知,它不会导致任何问题(编辑:,正如super(...).__init__(...)
的犹太使用所建议的那样),但我认为采用reset()
方法并且在__init__()
中调用它并且当你需要重置时会更干净。