从对象内部调用__init __()的效果

Jon*_*ono 2 python constructor garbage-collection init reset

我有一个课我想有时"重置".而不是手动清除类中的所有变量以及它使用的所有模块,我认为通过调用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)
Run Code Online (Sandbox Code Playgroud)

这会导致问题,还是有更好的方法来解决这个问题?

Sim*_*ser 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)
Run Code Online (Sandbox Code Playgroud)

这种模式很常见,因为它允许__init__重置类,你也可以单独重置类.我也在其他面向对象的语言中看到过这种模式,比如Java.