两者都是正确的,但是语义并不是以相同的方式实现的。
为了能够重置实例,我将编写以下代码(我更喜欢从
__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()只设置本地引用,该本地引用将在方法的末尾超出范围(并且破坏了新实例)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)