在这种情况下,如何在python中重置单例实例?
我试图使用以下代码在Python中创建一个单例类:在这种情况下,如何在python中重置单例实例?,python,Python,我试图使用以下代码在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._i
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]
def clear(cls):
cls._instances = {}
class MyClass(metaclass=Singleton):
def my_attribute(*args):
if len(args) == 1:
MyClass.i_attribute = args[0]
elif len(args) == 0:
try:
return MyClass.i_attribute
except:
MyClass.i_attribute = 0
但是clear()方法似乎不起作用:
MyClass.my_attribute(42)
MyClass.clear()
MyClass.my_attribute() # still returns 42, but I expect 0
如何删除MyClass的实例以便返回到0实例?user2357112是正确的。以下是正确的代码:
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]
def clear(cls):
cls._instances = {}
class MyClass(metaclass=Singleton):
def my_attribute(*args):
my = MyClass()
if len(args) == 1:
my.i_attribute = args[0]
elif len(args) == 0:
try:
return my.i_attribute
except:
my.i_attribute = 0
return my.i_attribute
你说它不工作,但你是如何使用它的,为什么你认为它不工作?你不能在Python中手动删除对象。(事实上,您根本不想删除实例,这表明单例可能并不适合您的用例,尽管您也无法手动删除非单例。)您甚至没有将数据存储在单例上,也没有使用单例进行任何操作。你在类上存储数据,如果你试图通过单例调用你的
my_属性
函数,它甚至不起作用。也许你复制粘贴了错误的代码?MyClass.my_attribute()函数在python3I中非常适合我,我无法想象您希望通过这种方式解决什么问题。首先,你不太可能有理由建立单身家庭。我认为这个模式被过度使用了,这也考虑到我几年没听说过。你说的是谁支持莫妮卡。顺便说一句,你能澄清一下他们说的什么是对的吗?换句话说,你改变了什么?为什么?否则这个答案就没有多大帮助了。