从obj内部调用\uuu init \uuu()的效果

2024-09-27 21:31:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类,我想'重置'的时候。与其手动清除类中的所有变量和它使用的所有模块,不如通过调用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)

这会不会引起问题,还是有更好的方法?你知道吗


Tags: thefromimportselfmodulesserverinitdef
2条回答

这样做很安全,除了自动调用__init__之外,没有什么神奇之处。你知道吗

不过,通常要做的是将公共代码重构到reset_class方法中(顺便说一句,类已经在类名中了)。然后从__init__方法调用reset。你知道吗

我建议换一种方式:

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等其他面向对象语言中也见过这种模式。你知道吗

相关问题 更多 >

    热门问题