Почему он реализует только последний экземпляр при использовании одноэлементного шаблона Python? - PullRequest
0 голосов
/ 23 ноября 2018

код указан ниже:

class A(object):
    __instance = None

    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            cls.__instance = object.__new__(cls)
            return cls.__instance
        else:
            return cls.__instance

    def __init__(self, book):
        self.book = book

    def pr(self):
        print(self.book)


if __name__ == "__main__":
    b = A("wind")
    a = A("good")
    print(a is b)
    print(a.pr())
    print(b.pr())

результат равен

True
good
None
good
None
почему результат не таков:
True
wind
good

в чем проблема с кодом?

1 Ответ

0 голосов
/ 23 ноября 2018

для каждого времени вызова A(), будет вызываться его __init__, поскольку он является одноэлементным, метод __init__(), вызываемый дважды для одного и того же объекта.Вы можете получить ожидаемый результат с:

b = A("wind")
b.pr()
a = A("good")
a.pr()
print(a is b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...