TGViewer
Python: задачки и вопросы Python: задачки и вопросы @quiz_python · 6.93K subscribers
Post #4296 583
В данном коде демонстрируется корректная работа декоратора 𝚃𝚛𝚊𝚌𝚎𝚛 с множественными экземплярами.

Марк Лутц «Изучаем Python», глава 39:

«Однако, как теоретически обсуждалось ранее, такая альтернатива, где используются только классы, подвержена множеству классов, но не вполне нормально работает с множеством экземпляров заданного класса: каждый вызов, создающий экземпляр, запускает метод __𝚌𝚊𝚕𝚕__, который перезаписывает предыдущий экземпляр».

Механизм работы:

🔘 При создании 𝚋𝚘𝚋 = 𝙿𝚎𝚛𝚜𝚘𝚗('𝙱𝚘𝚋') вызывается метод __𝚌𝚊𝚕𝚕__ декоратора 𝚃𝚛𝚊𝚌𝚎𝚛
🔘 В 𝚜𝚎𝚕𝚏.𝚠𝚛𝚊𝚙𝚙𝚎𝚍 сохраняется экземпляр 𝙿𝚎𝚛𝚜𝚘𝚗 с именем '𝙱𝚘𝚋'
🔘 𝚋𝚘𝚋 ссылается на объект 𝚃𝚛𝚊𝚌𝚎𝚛, который содержит экземпляр 𝙿𝚎𝚛𝚜𝚘𝚗('𝙱𝚘𝚋')
🔘 При создании 𝚜𝚞𝚎 = 𝙿𝚎𝚛𝚜𝚘𝚗('𝚂𝚞𝚎') создается новый объект 𝚃𝚛𝚊𝚌𝚎𝚛
🔘 В новом объекте 𝚃𝚛𝚊𝚌𝚎𝚛 в 𝚜𝚎𝚕𝚏.𝚠𝚛𝚊𝚙𝚙𝚎𝚍 сохраняется экземпляр 𝙿𝚎𝚛𝚜𝚘𝚗 с именем '𝚂𝚞𝚎'
🔘 𝚜𝚞𝚎 ссылается на новый объект 𝚃𝚛𝚊𝚌𝚎𝚛, который содержит экземпляр 𝙿𝚎𝚛𝚜𝚘𝚗('𝚂𝚞𝚎')

При обращении к 𝚋𝚘𝚋.𝚗𝚊𝚖𝚎 и 𝚜𝚞𝚎.𝚗𝚊𝚖𝚎:
🔘 𝚋𝚘𝚋.𝚗𝚊𝚖𝚎 обращается к атрибуту 𝚗𝚊𝚖𝚎 через __𝚐𝚎𝚝𝚊𝚝𝚝𝚛__ первого объекта 𝚃𝚛𝚊𝚌𝚎𝚛
🔘 __𝚐𝚎𝚝𝚊𝚝𝚝𝚛__ делегирует запрос к 𝚜𝚎𝚕𝚏.𝚠𝚛𝚊𝚙𝚙𝚎𝚍 первого объекта (содержит 𝙿𝚎𝚛𝚜𝚘𝚗('𝙱𝚘𝚋'))
🔘 Поэтому 𝚋𝚘𝚋.𝚗𝚊𝚖𝚎 возвращает '𝙱𝚘𝚋'
🔘𝚜𝚞𝚎.𝚗𝚊𝚖𝚎 обращается к атрибуту 𝚗𝚊𝚖𝚎 через __𝚐𝚎𝚝𝚊𝚝𝚝𝚛__ второго объекта 𝚃𝚛𝚊𝚌𝚎𝚛
🔘 __𝚐𝚎𝚝𝚊𝚝𝚝𝚛__ делегирует запрос к 𝚜𝚎𝚕𝚏.𝚠𝚛𝚊𝚙𝚙𝚎𝚍 второго объекта (содержит 𝙿𝚎𝚛𝚜𝚘𝚗('𝚂𝚞𝚎'))
🔘 Поэтому 𝚜𝚞𝚎.𝚗𝚊𝚖𝚎 возвращает '𝚂𝚞𝚎'

В данном случае каждый вызов 𝙿𝚎𝚛𝚜𝚘𝚗() создает новый объект 𝚃𝚛𝚊𝚌𝚎𝚛, поэтому проблема с перезаписью экземпляров не проявляется.
  • 👍 4
  • 👎 1
More from @quiz_python
  1. Sep 25, 2026Развёрнутое пояснение: 1. defaultdict(int) создаёт словарь, в котором фабрика int возвраща…
  2. Sep 25, 2026Post #4896
  3. Sep 25, 2026Развёрнутое пояснение: 1. Создаётся контекстная переменная request_id без значения по умол…
  4. Sep 25, 2026Post #4894
  5. Sep 24, 2026Развёрнутое пояснение: 1. Для класса Client строится порядок разрешения методов: Client, A…
  6. Sep 24, 2026Post #4892
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →