⚡️ Создаём декораторы для функций
Декоратор — «обёртка» над другой функцией. Она позволяет менять поведение функции, при этом не меняя код.
Чаще всего его можно встретить при разработке веб приложений (боты или сайты, например)
Начнём с того, что декоратор — сама по себе функция. Он создаёт внутри себя метод, который вызывает переданную функцию. После, декоратор возвращает только что созданный метод.
Понимаю, звучит всё очень сложно, так что будет в разы легче разобраться на примере.
Декораторы ещё могут принимать аргументы и быть классами, но это уже совсем другая тема — разберём её в другой раз.
#теория #декоратор
Декоратор — «обёртка» над другой функцией. Она позволяет менять поведение функции, при этом не меняя код.
Чаще всего его можно встретить при разработке веб приложений (боты или сайты, например)
Начнём с того, что декоратор — сама по себе функция. Он создаёт внутри себя метод, который вызывает переданную функцию. После, декоратор возвращает только что созданный метод.
Понимаю, звучит всё очень сложно, так что будет в разы легче разобраться на примере.
Декораторы ещё могут принимать аргументы и быть классами, но это уже совсем другая тема — разберём её в другой раз.
#теория #декоратор
⚡️ Классы-декораторы
Ранее мы уже рассказывали о функциях декораторах, теперь расскажем о классах.
Для начала стоит ответить на вопрос, знаете ли вы, в чём разница между функцией и классом? Она заключается в методе __call__.
Таким образом, если мы создадим класс с __call__, то мы получим ту же самую функцию, которую можно использовать как декоратор.
Основное преимущество такого способа в том, что мы можем задавать данные при инициализации декоратора. Разве это не круто?
#теория #декоратор
Ранее мы уже рассказывали о функциях декораторах, теперь расскажем о классах.
Для начала стоит ответить на вопрос, знаете ли вы, в чём разница между функцией и классом? Она заключается в методе __call__.
Таким образом, если мы создадим класс с __call__, то мы получим ту же самую функцию, которую можно использовать как декоратор.
Основное преимущество такого способа в том, что мы можем задавать данные при инициализации декоратора. Разве это не круто?
#теория #декоратор
⚡️ Упрощаем создание декораторов
Помните, мы уже говорили про создание декораторов и классов-декораторов. В этот раз мы поговорим о декораторе, который используется для создания этих самых декораторов.
Для этого мы воспользуемся декоратором
Её задача — выдавать себя за настоящую функцию, которая использует декоратор. То есть, она подменивает значения name и doc на значения реальной функции.
Если мы попытаемся получить имя или документацию функции, использующую декоратор, то мы получим все значения wrapper. Это может сбить некоторые редакторы и программистов с толку, поэтому многие используют
#миниурок #functools #декоратор
Помните, мы уже говорили про создание декораторов и классов-декораторов. В этот раз мы поговорим о декораторе, который используется для создания этих самых декораторов.
Для этого мы воспользуемся декоратором
@wraps
из модуля functools — это упрощение для функции functools.update_wrapper.Её задача — выдавать себя за настоящую функцию, которая использует декоратор. То есть, она подменивает значения name и doc на значения реальной функции.
Если мы попытаемся получить имя или документацию функции, использующую декоратор, то мы получим все значения wrapper. Это может сбить некоторые редакторы и программистов с толку, поэтому многие используют
@wraps
, как на примере выше.#миниурок #functools #декоратор