gpt4 book ai didi

python - 在 Python 中重置类的首选方法

转载 作者:太空狗 更新时间:2023-10-29 17:47:37 25 4
gpt4 key购买 nike

基于 this post on CodeReview .

我有课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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com