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
是在创建对象的新实例时调用的。您可以在实例上显式地调用它,否则它是一个普通的方法,但您通常不想这样做。你为什么想知道这个?