Método de metaclase de Python3 Singleton no funciona

Vi muchos métodos para hacer un singleton en Python e intenté usar la implementación de metaclase con Python 3.2 (Windows), pero no parece que devuelva la misma instancia de mi clase de 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(object): __metaclass__ = Singleton a = MyClass() b = MyClass() print(a is b) # False 

Utilizo la implementación de decorator ahora que está funcionando, pero me pregunto qué tiene de malo esta implementación.

La syntax de metaclase ha cambiado en Python3. Ver la documentación .

 class MyClass(metaclass=Singleton): pass 

Y funciona:

 >>> MyClass() is MyClass() True