Почему нельзя получить доступ к переменной класса при использовании __new__? - PullRequest
0 голосов
/ 20 сентября 2019

У меня следующий класс

class Singleton:
    _instance = None
    class_variable = {'a': 1}

    def __new__(cls, *args, **kwargs):
        if cls._instance is not None:
            cls._instance = super().__new__(cls, *args, **kwargs)
        return cls._instance

при создании экземпляра и доступе к class_variable

inst_1 = Singleton()
print(inst_1.class_variable)

Отображается ошибка

     11 inst_1 = Singleton()
---> 12 print(inst_1.class_variable)

AttributeError: 'NoneType' object has no attribute 'class_variable'

Не знаюзнаете почему?

1 Ответ

0 голосов
/ 20 сентября 2019

_instance начинается None.Но вы создаете фактический экземпляр только тогда, когда _instance равен , а не None, поэтому вы никогда не вызываете super().__new__.

Просто измените тест:

    if cls._instance is None:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...