Python:在同一实例上多次调用
创建对象时,将调用Python:在同一实例上多次调用,python,initialization,Python,Initialization,创建对象时,将调用\uuuu init\uuu()函数。 创建对象后,再次调用对象\uuuu init\uuuu()函数可以吗 instance = cls(p1=1, p2=2) # some code instance.__init__(p1=123, p2=234) # some more code instance.__init__(p1=23, p2=24) 为什么有人要对一个已经创建的对象调用\uuuuu init\uuuu() 好问题。我想重新初始化实例的字段。据我所知,它不会引
\uuuu init\uuu()
函数。
创建对象后,再次调用对象\uuuu init\uuuu()
函数可以吗
instance = cls(p1=1, p2=2)
# some code
instance.__init__(p1=123, p2=234)
# some more code
instance.__init__(p1=23, p2=24)
为什么有人要对一个已经创建的对象调用\uuuuu init\uuuu()
好问题。我想重新初始化实例的字段。据我所知,它不会引起任何问题(编辑:按照
super(…)。\uuuu init\uuuu(…)
),但我认为有一个reset()
方法,并在\uu init\uuuuuu()中调用它)
并且当您需要重置时会更干净。在对象上多次调用\uuuu init\uuuu
是可以的,只要\uuuuu init\uuuu
编码的效果是您想要的(无论是什么)。一个典型的情况是,当类的\uuuuuu new\uuuuuu
方法返回类的实例时(因此最好适当地编写\uuuuuu init\uuuu
),这确实会导致对返回的实例调用\uuuuuu init\uuuuu
(如果继续“循环”,可能是第二次或第二十次)通过您的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。很多Python实际上只是一种约定,因此您不妨遵循这种约定,并期望只调用一次\uuuu init\uuu
。我建议您创建一个名为init
或reset
的函数,或设置实例变量的函数,当您想要重置实例时使用它,并且让\uuuuuu init\uuuuu
只需调用init
。这显然看起来更理智:
x = Pt(1,2)
x.set(3,4)
x.set(5,10)
+1:请不要调用\uuuu init\uuuu
,这违反了所有阅读和维护您的代码的人的期望。这只是一个糟糕的设计。这是一个糟糕的设计。试图阅读和维护您的代码的人会感到困惑。请使用普通名称的普通方法。让\uuuu init\uuuu
调用另一个方法(例如,重置
),以便清楚发生了什么。