Python:在同一实例上多次调用__init __()
创建对象时会调用__init__()
函数。 在创建对象之后再次调用对象__init__()
函数可以吗?Python:在同一实例上多次调用__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__()
在已经产生的?
很好的问题。我想重新初始化实例的字段。
在对象上多次调用__init__
就可以了,只要__init__
用您想要获得的效果编码即可(无论可能如何)。一个典型的情况发生(所以你最好编码__init__
适当! - )是当你的班级的__new__
方法返回类的一个实例:确实原因__init__
被调用在返回的实例(为什么可能是如果你通过你的__new__
来保留“回收”实例,那么第二个或第二十个时间! - )。
据我所知,它不会引起任何问题(编辑:由super(...).__init__(...)
的洁净利用的建议),但我认为有一个reset()
方法,把它无论是在__init__()
,当你需要重新设置会更干净。
你可以,但它有点破坏__init__
打算做的事情。很多Python实际上只是一种惯例,所以你不妨遵循这个规则,并期望__init__
只能被调用一次。我建议创建一个名为init
或reset
的函数或设置实例变量的函数,当您想要重置实例时使用该函数,并且__init__
只需调用init
。这绝对看起来更健全:
x = Pt(1,2)
x.set(3,4)
x.set(5,10)
+1:请不要调用'__init__'这违反了每个人阅读和维护代码的期望。这只是糟糕的设计。 – 2010-01-27 11:24:21
这是一个可怕的设计。试图阅读和维护你的代码的人会感到困惑。请使用普通名称的普通方法。让'__init__'调用另一个方法(例如'reset'),这样就清楚发生了什么。 – 2010-01-27 11:25:41