Разобрать метакласс с попыткой реализации Singleton

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) >>