Python - Проблема с пониманием кода шаблона проектирования моносостояния - PullRequest
0 голосов
/ 04 августа 2020

Я видел этот фрагмент кода в руководстве по шаблону проектирования Monostate в Python:

class BookShelf:
    _shared_state = {}

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

    def __new__(cls, *args, **kwargs):
        object_ = super().__new__(cls)
        object_.__dict__ = cls._shared_state
        return object_

Когда я тестировал этот код, он работал, поскольку адреса классов разные, а number_of_books разделяется между ними. Я не понимаю, как number_of_books передается _shared_state. Из кода я понимаю, что _shared_state передается в атрибут __dict__ новых объектов. Так как же состояние фактически распределяется между экземплярами, если __dict__ никогда не передается в _shared_state?!

1 Ответ

1 голос
/ 04 августа 2020
  • _shared_state - это переменная класса, которая используется всеми экземплярами класса.
  • __new__ метод отвечает за создание экземпляра класса, поэтому вы можете использовать этот метод для настройки создание объекта.
  • __dict__ - словарь или другой объект отображения, используемый для хранения атрибутов объекта (доступных для записи). Или, другими словами, __dict__ - это словарь, содержащий пространство имен класса;
  • __dict__ перезаписывается одним и тем же объектом словаря _shared_state для всех созданных объектов, поэтому все они будут использовать один и тот же __dict__ объект
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...