我在 Python (3) 中有一个类 Foo
,它当然包括一个 __init__()
方法。这个类会触发几个提示并执行它的操作。假设我希望能够重置 Foo
这样我就可以重新开始整个过程。
什么是首选实施?
再次调用 __init__()
方法
def reset(self):
self.__init__()
或创建一个新实例?
def reset(self):
Foo()
我不确定创建 Foo
的新实例是否会留下任何可能影响性能的东西,如果多次调用 reset
。另一方面 __init__()
如果并非所有属性都在 __init__()
中定义(重新),则可能会产生副作用。
有没有更好的方法来做到这一点?
原文由 JAD 发布,翻译遵循 CC BY-SA 4.0 许可协议
两者都是正确的,但语义的实现方式不同。
为了能够重置一个实例,我会写这个(我更喜欢从
__init__
调用自定义方法而不是相反,因为__init__
是一种特殊方法,但这主要是一个口味问题):你这样使用它:
从头开始创建一个新实例实际上更简单,因为该类不必实现任何特殊方法:
如果旧实例未在其他任何地方使用,它将被垃圾回收
这两种方式都可用于 普通 类,其中所有初始化都在
__init__
中完成,但第二种方式需要在创建时使用__new__
自定义的特殊类,例如不可变类.但请注意,这段代码:
不会 做你想做的事:它只会创建一个新实例,并立即删除它,因为它会在方法结束时超出范围。即使是
self = Foo()
也只会设置本地引用,这同样会在方法结束时超出范围(并且新实例被销毁)。