我有一个班,我有时想'重置'。我没有手动清除类中的所有变量以及它使用的所有模块,而是认为通过在自身上调用 init 来重构它可能是个好主意。我担心的是,我不太确定这是一个好的模式,还是GC正在清除旧的对象。
以下是一个例子:
from modules import SmallClass
from modules import AnotherClass
class BigClass(object):
def __init__(self, server=None):
"""construct the big class"""
self.server = server
self.small_class = SmallClass(self.server)
self.another_class = AnotherClass(small_class)
def reset_class(self):
"""reset the big class"""
self.__init__(self.server)
这会导致问题,还是有更好的方法来解决这个问题?
答案 0 :(得分:5)
我建议反过来做这件事:
from modules import SmallClass
from modules import AnotherClass
class BigClass(object):
def __init__(self, server=None):
"""construct the big class"""
self.reset_class(server)
def reset_class(self, server=None):
"""reset the big class"""
self.server = server
self.small_class = SmallClass(self.server)
self.another_class = AnotherClass(small_class)
这种模式很常见,因为它允许__init__
重置类,你也可以单独重置类。我也在其他面向对象的语言中看到过这种模式,比如Java。
答案 1 :(得分:1)
这样做是安全的,__init__
除了被自动调用之外没有任何魔力。
但是,正常的做法是将公共代码重构为reset_class
方法(我称之为reset
btw,类已经在类名中)。只需从reset
方法调用__init__
。