我有课
Python (3) 中的 Foo
,当然包含一个 __init__()
方法。这个类会触发几个提示并执行它的操作。假设我希望能够重置 Foo
,这样我就可以重新开始整个过程。
首选的实现方式是什么?
再次调用__init__()
方法
def reset(self):
self.__init__()
还是创建一个新实例?
def reset(self):
Foo()
如果多次调用 reset
,我不确定创建 Foo
的新实例是否会留下任何可能影响性能的东西。另一方面,如果不是所有属性都在 __init__()
中(重新)定义,则 __init__()
可能会产生副作用。
有更好的方法吗?
最佳答案
两者都是正确的,但语义的实现方式不同。
为了能够重置一个实例,我会写这个(我更喜欢从 __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()
也只会设置本地引用,这同样会在方法结束时超出范围(并且新实例被销毁)。
关于python - 在 Python 中重置类的首选方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45798899/