我有一个 Python 中的单例对象:
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]
@classmethod
def destroy(cls):
del cls._instances[cls]
class MockObject(metaclass=Singleton):
def __init__(self, *args, **kwargs):
# various things
我希望在某个时间点销毁对象,因此我在元类中编写了一个classmethod。然而,cls
指的是元类Singleton
而不是MockObject
。有没有办法以MockObject
的值调用destroy
函数?
destroy
方法放在MockObject
上,因为它属于它(或者创建一个名为MockBase
的类来实现这个方法)。但是,如果该实例在其他地方有任何引用,试图销毁它也没有意义,因为它仍然会存在。 - kindalldel Singleton._instances[cls]
这样的语句。你也可以使用gc
模块来确保只有一个引用,否则抛出错误。 - kindall__new__
而不是__call__
,这应该调用__new__
和__init__
两者?这基本上就是Python中bool
和NoneType
所做的。 - Mad Physicist