Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在这种情况下,如何在python中重置单例实例?_Python - Fatal编程技术网

在这种情况下,如何在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

我试图使用以下代码在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]
    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中非常适合我,我无法想象您希望通过这种方式解决什么问题。首先,你不太可能有理由建立单身家庭。我认为这个模式被过度使用了,这也考虑到我几年没听说过。你说的是谁支持莫妮卡。顺便说一句,你能澄清一下他们说的什么是对的吗?换句话说,你改变了什么?为什么?否则这个答案就没有多大帮助了。