Марк Лутц «Изучаем 𝙿𝚢𝚝𝚑𝚘𝚗», глава 39:
«Из−за того, что декораторы классов способны перехватывать вызовы, создающие экземпляры, они могут использоваться либо для управления созданием экземпляров классов, либо для реализации паттерна проектирования «одиночка». В последнем случае декоратор обеспечивает, чтобы экземпляр класса существовал в единственном числе, и при последующих вызовах возвращался именно он.»
Декоратор 𝚂𝚒𝚗𝚐𝚕𝚎𝚝𝚘𝚗 работает следующим образом:
− В словаре 𝚒𝚗𝚜𝚝𝚊𝚗𝚌𝚎𝚜 хранятся созданные экземпляры для каждого класса;
− При первом вызове 𝙿𝚎𝚛𝚜𝚘𝚗('𝙱𝚘𝚋') создается экземпляр и сохраняется в словаре;
− При втором вызове 𝙿𝚎𝚛𝚜𝚘𝚗('𝚂𝚞𝚎') декоратор проверяет, что экземпляр уже существует, и возвращает тот же объект;
− Поэтому и 𝚋𝚘𝚋, и 𝚜𝚞𝚎 ссылаются на один и тот же объект с именем '𝙱𝚘𝚋'.
Таким образом, при выводе 𝚋𝚘𝚋.𝚗𝚊𝚖𝚎 и 𝚜𝚞𝚎.𝚗𝚊𝚖𝚎 мы получаем '𝙱𝚘𝚋' дважды, поскольку это один и тот же объект.
Post #4289
743
- 👍 2
- 👎 1