2010-01-27 26 views
9

创建对象时会调用__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__()在已经产生的?

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

+1

这是一个可怕的设计。试图阅读和维护你的代码的人会感到困惑。请使用普通名称的普通方法。让'__init__'调用另一个方法(例如'reset'),这样就清楚发生了什么。 – 2010-01-27 11:25:41

回答

10

在对象上多次调用__init__就可以了,只要__init__用您想要获得的效果编码即可(无论可能如何)。一个典型的情况发生(所以你最好编码__init__适当! - )是当你的班级的__new__方法返回类的一个实例:确实原因__init__被调用在返回的实例(为什么可能是如果你通过你的__new__来保留“回收”实例,那么第二个或第二十个时间! - )。

1

据我所知,它不会引起任何问题(编辑:super(...).__init__(...)的洁净利用的建议),但我认为有一个reset()方法,把它无论是在__init__(),当你需要重新设置会更干净。

3

你可以,但它有点破坏__init__打算做的事情。很多Python实际上只是一种惯例,所以你不妨遵循这个规则,并期望__init__只能被调用一次。我建议创建一个名为initreset的函数或设置实例变量的函数,当您想要重置实例时使用该函数,并且__init__只需调用init。这绝对看起来更健全:

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

+1:请不要调用'__init__'这违反了每个人阅读和维护代码的期望。这只是糟糕的设计。 – 2010-01-27 11:24:21

相关问题