我正在使用方法3:来自Creating a singleton in Python的元类来创建来自singleton类的对象。
现在,根据某个事件,我想删除这个单例对象,并从由元类维护的字典中删除它的条目
我怎么能这样做(没有在Singleton类中做任何改变)?
以下是更好理解的代码段:
class Singleton(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instances[cls]
class MyClass():
__metaclass__ = Singleton
def __init__(self, val1):
self.val1 = val1
obj1 = MyClass(10)
print obj1.val1
del obj1
obj2 = MyClass(20)
print obj2.val1
输出:
10
10
答案 0 :(得分:2)
只需修改元类型上的字典:
del type(MyClass)._instances[MyClass]
或更直接:
del Singleton._instances[MyClass]
演示:
>>> obj1 = MyClass(10)
>>> print obj1.val1
10
>>> del obj1
>>> obj2 = MyClass(20)
>>> print obj2.val1
10
>>> del obj2
>>> del type(MyClass)._instances[MyClass]
>>> obj3 = MyClass(30)
>>> print obj3.val1
30