【发布时间】:2018-01-29 15:13:13
【问题描述】:
我有课
Python (3) 中的Foo,其中当然包括__init__() 方法。这个类触发几个提示并做它的事情。假设我希望能够重置Foo,这样我就可以重新开始该过程。
首选的实现是什么?
再次调用__init__()方法
def reset(self):
self.__init__()
还是创建一个新实例?
def reset(self):
Foo()
如果reset 被多次调用,我不确定创建Foo 的新实例是否会留下任何可能影响性能的东西。另一方面,如果不是所有属性都在__init__() 中(重新)定义,__init__() 可能会产生副作用。
有没有首选的方法来做到这一点?
【问题讨论】:
-
“你做错了”。没有“重置类”模式是有原因的:当您处理完一个类实例中的数据后,您将处理该实例并创建另一个实例。
-
@jsbueno 如果我没记错的话,这是第二个选项的作用。
-
不是真的 - 如果出于某种原因你希望你的班级只有一个实例 - 这些是要做的事情 - 这是很少需要的(如果需要,应该小心在
__new__方法中)。只需创建一个新实例 - 如果没有对前一个实例的其他引用,它将自然丢弃。换句话说:普通代码不会“手动”调用__init__- 只需创建一个新实例并允许语言这样做。 -
我想指出,“创建和处理新实例”方法有时会导致内存使用量激增,尤其是在像 python 这样的语言中,您无法使用函数自行清理像 .Dispose() 或 .Free() 并且必须信任垃圾收集器。想象一下,您需要创建数千个、数百万个该类,或者只创建一个并重用。不仅内存使用量会有天壤之别,而且速度也会更快,因为每次都没有新的内存分配。所以...请不要使用“一种方法涵盖所有”的课程。
标签: python python-3.x class