Python3 синглетный метод метакласса не работает
Я видел много методов создания синглтона в 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, которая работает, но мне интересно, что не так с этой реализацией?
1 ответ:
Синтаксис метаклассаизменился в Python3. Смотритедокументацию .
class MyClass(metaclass=Singleton): pass
И это работает:
>>> MyClass() is MyClass() True