Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:在同一实例上多次调用_Python_Initialization - Fatal编程技术网

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
调用另一个方法(例如,
重置
),以便清楚发生了什么。