Python3单例元类方法不起作用

Python3单例元类方法不起作用,python,python-3.x,singleton,metaclass,Python,Python 3.x,Singleton,Metaclass,我在Python中看到了很多创建单例的方法,我尝试在Python 3.2(Windows)中使用元类实现,但它似乎没有返回我的单例类的相同实例 class Singleton(type): _instances = {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] = super(Singleton, cls)._

我在Python中看到了很多创建单例的方法,我尝试在Python 3.2(Windows)中使用元类实现,但它似乎没有返回我的单例类的相同实例

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(object):
    __metaclass__ = Singleton

a = MyClass()
b = MyClass()
print(a is b) # False
我现在使用正在工作的decorator实现,但我想知道这个实现有什么问题?

Python3中的元类语法。请参阅

它的工作原理是:

>>> MyClass() is MyClass()
True

我知道这个线程很旧,但是如果你在用Python3编程,为什么要使用Python2语法呢?还有人担心这个类被允许接受参数吗?当一个单例被“实例化”时,定义了什么行为“有两组不同的参数吗?你的名字很合适。我发现的所有教程都很不错,但从未针对Python3进行过更新。你只是把时间缩短到了几个小时,这可能需要几天的时间。。。谢谢。您遗漏了父类(对象)。它是否仍然有效,是否有理由使用类似于
classmyclass(object,metaclass=Singleton)
?如果您想对
object
以外的对象进行子类化。对于
对象
它是多余的。我必须做
类MyClass(\uuuuuu元类\uuuuuu=Singleton):
,即元类两边都有双下划线,否则我得到的
单词元类拼写不正确
>>> MyClass() is MyClass()
True