如何删除(拆卸)Python中用于单元测试的单例实例装饰器?

如何删除(拆卸)Python中用于单元测试的单例实例装饰器?,python,python-unittest,Python,Python Unittest,我是Python新手。我有一个单体装饰器定义为: def singleton(cls): instances = {} def getinstance(): if cls not in instances: instances[cls] = cls() return instances[cls] return getinstance 还有我的单身班: @singleton class MyClass:

我是Python新手。我有一个单体装饰器定义为:

def singleton(cls):
    instances = {}

    def getinstance():
        if cls not in instances:
            instances[cls] = cls()
        return instances[cls]
    return getinstance
还有我的单身班:

@singleton
class MyClass:

    def __init__(self, **kwargs):
        self.config = None
        ...
我想为MyClass编写一些单元测试,但我需要在tearDown()方法上销毁它,以便测试正常运行。我怎么做


非常感谢,

我想这个问题可以被重新问成“我可以访问闭包之外的闭包变量”来清除ìinstances的dict

我还没有对此进行测试,但这种方法可以在将实例数据作为函数属性公开的情况下工作(基本上使其等于模块级变量):

然而,我不确定你是否想通过所有的魔法来拥有一个单身汉。例如,另一种不那么神奇的延迟加载模式可能是:

class MyClass:

     @classmethod
     def get_instance(cls):
         if not hasattr(cls, "_instance"):
             cls._instance = cls()
         return cls._instance

instance = MyClass.get_instance()
或者更简单,无需延迟加载:

class MyClass:
    ...


MyClass.instance = MyClass()

哇,太快了。谢谢,@Mikkoohtama,谢谢你的回复。我现在正在读书;装饰器只是闭包,所以是的,你的问题reprahse更好。是的-问题是我不确定你是否有一些特定的理由首先使用闭包。
class MyClass:
    ...


MyClass.instance = MyClass()