Шаг 44.
Python: тонкости программирования.
Эффективные функции. Сила декораторов (общие сведения)

    На этом шаге мы приведем краткое введение в декораторы.

    В своей основе декораторы Python позволяют расширять и изменять поведение вызываемых объектов (функций, методов и классов) без необратимой модификации самих вызываемых объектов.

    Любая достаточно универсальная функциональность, которую можно прикрепить к существующему классу или поведению функции, является отличным кандидатом для декорирования. Сюда входят:

    Итак, зачем осваивать использование декораторов в Python? В конце концов, только что упомянутое выше выглядит довольно абстрактным, и, вполне возможно, вообще сложно увидеть, какую пользу принесут декораторы в повседневной работе разработчика. Позвольте несколько прояснить этот вопрос, предоставив вам вполне реальный пример.

    Предположим, в вашей программе составления отчетности есть 30 функций с бизнес-логикой. Одним дождливым утром понедельника ваш босс подходит к вашему столу и заявляет: "Доброго понедельника! Помните ту отчетность по TPS? Мне нужно, чтобы вы в каждый шаг генератора отчетов добавили ведение протокола входных и выходных операций. Компании XYZ это нужно для аудиторских целей. Да, и еще. Я им сказал, что к среде мы сможем все отправить".

    В зависимости от того, насколько вы разбираетесь в декораторах, от этого поручения либо у вас подскочит давление, либо вы останетесь в относительном спокойствии.

    Без декораторов следующие три дня вам пришлось бы провести в попытках модифицировать каждую из этих 30 функций, приводя их в полный беспорядок ручными вызовами операции журналирования. Чудесно, не правда ли?

    А если вы знаете свои декораторы, вы спокойно улыбнетесь своему боссу и скажете: "Не беспокойся, Джим. Я сделаю это сегодня к 14:00".

    Сразу после этого вы наберете исходный код для универсального декоратора @audit_log (всего порядка 10 строк кода) и быстро вставите его перед каждым определением функции. Затем вы зафиксируете код в GitHub и перехватите очередную чашечку кофе...

    Декораторы действительно бывают такими мощными. Можно даже сказать, что для любого серьезного программиста на Python понимание декораторов является важной вехой. Они требуют твердого усвоения нескольких продвинутых концепций языка, включая свойства функций первого класса.

    Уверены, что награда за понимание того, как в Python работают декораторы, может быть огромной.

    Несомненно, декораторы довольно сложны, чтобы твердо усвоить их с первого раза, но они - очень полезное функциональное средство языка, с которым вы будете часто сталкиваться в сторонних платформах и в стандартной библиотеке Python. В любом хорошем обучающем пособии по Python задача объяснения декораторов относится к разряду пан или пропал. Здесь мы шаг за шагом познакомим вас с ними.

    Правда, прежде чем вы погрузитесь в эту тему, сейчас самый подходящий момент, чтобы освежить память относительно свойств функций первого класса в Python. Самыми важными для понимания декораторов выводами относительно "функций первого класса" являются следующие:

    Готовы? Отлично! Тогда приступим.

    На следующем шаге мы рассмотрим основы декораторов.




Предыдущий шаг Содержание Следующий шаг