两者都是正确的,但是语义并不是以相同的方式实现的。
为了能够重置实例,我将编写以下代码(我更喜欢从__init__
相反的位置调用自定义方法,因为这__init__
是一种特殊方法,但这主要是出于口味问题):
class Foo:
def __init__(self):
self.reset()
def reset(self):
# set all members to their initial value
您以这种方式使用它:
Foo foo # create an instance
...
foo.reset() # reset it
实际上,从头开始创建新实例更为简单,因为该类无需实现任何特殊方法:
Foo foo # create an instance
...
foo = Foo() # make foo be a brand new Foo
如果旧实例未在其他任何地方使用,则将被垃圾回收
两种方法都可用于所有初始化都在中完成的 普通 类__init__
,但是第二种方法对于在创建时使用定制的特殊类__new__
(例如不可变类)是必需的。
但是请注意,这段代码:
def reset(self):
Foo()
会 做你想做的:它只是创建一个新的实例,并立即删除它,因为它会在方法的走到底的范围了。甚至self = Foo()
只设置本地引用,该本地引用将在方法的末尾超出范围(并且破坏了新实例)。