12. Разобрать метакласс с попыткой реализации Singleton
Условие задачи Разберите поведение метакласса и определите, какую задачу пытается решить данная реализация. Нужно понять, как работает переопределение new в метаклассе и к чему приведёт сохранение экземпляра в атрибуте класса.
class NewCls(type):
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super().__new__(cls, *args, **kwargs)
return cls._instance
Что выведут принты?
test = NewCls("X", (object,), {"a": 1, "b": 2})
print(test.a) >>
test2 = NewCls("X", (object,), {"a": 12, "b": 22})
print(test2.a) >>
Изменили код, что теперь выведут принты?
class NewCls(type):
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super().__new__(cls, *args, **kwargs)
return cls._instance
def __init__(self, *args):
self.a = args
test = NewCls("X", (object,), {"a": 1, "b": 2})
print(test.a) >>
test2 = NewCls("X", (object,), {"a": 12, "b": 22})
print(test2.a) >>