如何删除(拆卸)Python中用于单元测试的单例实例装饰器?
我是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:
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()