python中的_uinit__;()函数是否可以在与对象创建不同的时刻调用?

python中的_uinit__;()函数是否可以在与对象创建不同的时刻调用?,python,function,Python,Function,是否可以显式调用\uuuu init\uuuu()函数?或者在实例化类的对象时始终调用函数?\uuuu init\uuuu在实例化时调用。当您调用some\u instance=SomeClass(a,b)时,将使用self、a和b作为参数来调用它 Python有“我们都是同意的成年人”的座右铭,所以是的,你可以——但是每次你调用双下划线方法时,你应该真正知道你在做什么,如果它破坏了什么,你必须面对后果 大多数类的设计都不是在实例化后调用\uuuuu init\uuuu,这将是一种奇怪的设计;如

是否可以显式调用
\uuuu init\uuuu()
函数?或者在实例化类的对象时始终调用函数?

\uuuu init\uuuu
在实例化时调用。当您调用
some\u instance=SomeClass(a,b)
时,将使用
self
a
b
作为参数来调用它

Python有“我们都是同意的成年人”的座右铭,所以是的,你可以——但是每次你调用双下划线方法时,你应该真正知道你在做什么,如果它破坏了什么,你必须面对后果

大多数类的设计都不是在实例化后调用
\uuuuu init\uuuu
,这将是一种奇怪的设计;如果您试图调用某个实例。\uuuu init\uuu(*args)为了回收一个对象,只需获得一个调用
SomeClass(*args)
的新实例-调用
\uuuuu init\uugs
不能保证从现有实例重置状态,打赌这将是一个糟糕的设计


我不知道显式调用
\uuuuu init\uuuu
的任何用例,除了在实例化时使用
super
\uu init\uuuu
重写父类
\uuuuu>
。当您调用
some\u instance=SomeClass(a,b)
时,将使用
self
a
b
作为参数来调用它

Python有“我们都是同意的成年人”的座右铭,所以是的,你可以——但是每次你调用双下划线方法时,你应该真正知道你在做什么,如果它破坏了什么,你必须面对后果

大多数类的设计都不是在实例化后调用
\uuuuu init\uuuu
,这将是一种奇怪的设计;如果您试图调用某个实例。\uuuu init\uuu(*args)
为了回收一个对象,只需获得一个调用
SomeClass(*args)
的新实例-调用
\uuuuu init\uugs
不能保证从现有实例重置状态,打赌这将是一个糟糕的设计


除了使用
super

覆盖父类之外,我不知道显式调用
\uuuuuu init\uuuu
的任何用例,首先,创建对象时不调用
\uu init\uuuu
。对象创建的工作是
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
之前调用的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。请参阅详细说明。
回到问题上来,是的,这样做是可能的。以下是演示的快捷方式:

>>> class Test(object):
...     def __init__(self):
...         print "instantiating object"
... 
>>> t = Test()
instantiating object
>>> t.__init__()
instantiating object

谢谢

首先,无论何时创建对象,都不会调用
\uuuuu init\uuuu
,而是实例化对象。对象创建的工作是
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
之前调用的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。请参阅详细说明。
回到问题上来,是的,这样做是可能的。以下是演示的快捷方式:

>>> class Test(object):
...     def __init__(self):
...         print "instantiating object"
... 
>>> t = Test()
instantiating object
>>> t.__init__()
instantiating object

谢谢

Python是一种非常宽松的语言,这也意味着您可以做一些不应该做的事情。因此,虽然
\uuuu init\uuuu()
是一个方法(这意味着您可以像任何其他方法一样直接调用它),但结果因类而异。一些类在
\uuuu init\uuuu()
中初始化了它们的所有状态,因此再次调用它可以有效地重置类。其他类的行为不同,并且不能保证一个类总是以这种或那种方式行为

通常,当您需要两步初始化(即创建类,进行一些设置,然后真正初始化)时,会出现这个问题。为此创建一个新的
init()
方法:

a = A()
a.setFoo(foo)
a.init()

类似地,如果您的类支持重置,请添加一个
reset()
方法。

Python是一种非常宽松的语言,这也意味着您可以做一些不应该做的事情。因此,虽然
\uuuu init\uuuu()
是一个方法(这意味着您可以像任何其他方法一样直接调用它),但结果因类而异。一些类在
\uuuu init\uuuu()
中初始化了它们的所有状态,因此再次调用它可以有效地重置类。其他类的行为不同,并且不能保证一个类总是以这种或那种方式行为

通常,当您需要两步初始化(即创建类,进行一些设置,然后真正初始化)时,会出现这个问题。为此创建一个新的
init()
方法:

a = A()
a.setFoo(foo)
a.init()

类似地,如果您的类支持重置,请添加一个
reset()
方法。

技术上是,但不支持。
\uuuu init\uuuu
在创建对象的新实例时被调用。您可以在实例上显式地调用它,否则它是一个普通的方法,但您通常不想这样做。为什么您想知道这一点?从技术上讲是的,但不想知道。
\uuuu init\uuuu
是在创建对象的新实例时调用的。您可以在实例上显式地调用它,否则它是一个普通的方法,但您通常不想这样做。你为什么想知道这个?