TGViewer
Python: задачки и вопросы Python: задачки и вопросы @quiz_python · 6.93K subscribers
Post #4300 642
В данном коде демонстрируется декоратор регистрации, который добавляет объекты в словарь для будущей обработки.

Предположим, что вы требуете от методов или классов, используемых приложением, регистрации в API−интерфейсе для будущей обработки (может быть, API−интерфейс позже будет обращаться к объектам и отвечать на текущие события). Несмотря на то что это могли бы предоставить регистрационные функции, которые выполняли вызову вручную после того, как объекты определены, декораторы сделают ваше решение более элегантным.

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

🔘 Декоратор 𝚛𝚎𝚐𝚒𝚜𝚝𝚎𝚛 добавляет функции в словарь 𝚛𝚎𝚐𝚒𝚜𝚝𝚛𝚢 по их имени
🔘 При декорировании @𝚛𝚎𝚐𝚒𝚜𝚝𝚎𝚛 функции 𝚜𝚙𝚊𝚖 и 𝚎𝚐𝚐𝚜 автоматически регистрируются
🔘 𝚛𝚎𝚐𝚒𝚜𝚝𝚛𝚢[𝚘𝚋𝚓.__𝚗𝚊𝚖𝚎__] = 𝚘𝚋𝚓 сохраняет ссылку на функцию в словаре
🔘 𝚛𝚎𝚝𝚞𝚛𝚗 𝚘𝚋𝚓 возвращает саму функцию, а не обертку

Поскольку он возвращает сам объект, а не оболочку, он не перехватывает будущие вызовы.

Вывод кода:
🔘 𝚁𝚎𝚐𝚒𝚜𝚝𝚛𝚢: показывает содержимое словаря 𝚛𝚎𝚐𝚒𝚜𝚝𝚛𝚢 с именами функций, их объектами и типами
🔘 𝙼𝚊𝚗𝚞𝚊𝚕 𝚌𝚊𝚕𝚕𝚜: прямые вызовы функций 𝚜𝚙𝚊𝚖(𝟺) = 𝟷𝟼, 𝚎𝚐𝚐𝚜(𝟾) = 𝟻𝟷𝟸
🔘 𝚁𝚎𝚐𝚒𝚜𝚝𝚛𝚢 𝚌𝚊𝚕𝚕𝚜: вызовы функций через словарь 𝚛𝚎𝚐𝚒𝚜𝚝𝚛𝚢 с аргументом 𝟸: 𝚜𝚙𝚊𝚖(𝟸) = 𝟺, 𝚎𝚐𝚐𝚜(𝟸) = 𝟾

Таким образом, регистр хранит ссылки на функции и классы, и их можно вызывать напрямую через регистр.
  • 👍 3
  • ❤ 1
  • 👎 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 →