В данном коде демонстрируется декоратор регистрации, который добавляет объекты в словарь для будущей обработки.
Предположим, что вы требуете от методов или классов, используемых приложением, регистрации в API−интерфейсе для будущей обработки (может быть, API−интерфейс позже будет обращаться к объектам и отвечать на текущие события). Несмотря на то что это могли бы предоставить регистрационные функции, которые выполняли вызову вручную после того, как объекты определены, декораторы сделают ваше решение более элегантным.
Механизм работы:
🔘 Декоратор 𝚛𝚎𝚐𝚒𝚜𝚝𝚎𝚛 добавляет функции в словарь 𝚛𝚎𝚐𝚒𝚜𝚝𝚛𝚢 по их имени
🔘 При декорировании @𝚛𝚎𝚐𝚒𝚜𝚝𝚎𝚛 функции 𝚜𝚙𝚊𝚖 и 𝚎𝚐𝚐𝚜 автоматически регистрируются
🔘 𝚛𝚎𝚐𝚒𝚜𝚝𝚛𝚢[𝚘𝚋𝚓.__𝚗𝚊𝚖𝚎__] = 𝚘𝚋𝚓 сохраняет ссылку на функцию в словаре
🔘 𝚛𝚎𝚝𝚞𝚛𝚗 𝚘𝚋𝚓 возвращает саму функцию, а не обертку
Поскольку он возвращает сам объект, а не оболочку, он не перехватывает будущие вызовы.
Вывод кода:
🔘 𝚁𝚎𝚐𝚒𝚜𝚝𝚛𝚢: показывает содержимое словаря 𝚛𝚎𝚐𝚒𝚜𝚝𝚛𝚢 с именами функций, их объектами и типами
🔘 𝙼𝚊𝚗𝚞𝚊𝚕 𝚌𝚊𝚕𝚕𝚜: прямые вызовы функций 𝚜𝚙𝚊𝚖(𝟺) = 𝟷𝟼, 𝚎𝚐𝚐𝚜(𝟾) = 𝟻𝟷𝟸
🔘 𝚁𝚎𝚐𝚒𝚜𝚝𝚛𝚢 𝚌𝚊𝚕𝚕𝚜: вызовы функций через словарь 𝚛𝚎𝚐𝚒𝚜𝚝𝚛𝚢 с аргументом 𝟸: 𝚜𝚙𝚊𝚖(𝟸) = 𝟺, 𝚎𝚐𝚐𝚜(𝟸) = 𝟾
Таким образом, регистр хранит ссылки на функции и классы, и их можно вызывать напрямую через регистр.
Post #4300
642
- 👍 3
- ❤ 1
- 👎 1