Найти в Дзене
MakeBetter[Code] Blog

[🐍] Декораторы в Python - что это?

Оглавление
Courtesy of neuralblender.com | CC-BY
Courtesy of neuralblender.com | CC-BY

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

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

Например, если вы хотите логировать все вызовы функции, вы можете сделать это следующим образом:

-2

Здесь в строке 5 мы создаем декоратор.

В строке 6 мы определяем функцию-обертку.

В строке 9 мы возвращаем результат запуска оригинальной функции.

В строке 10 мы возвращаем функцию-обертку. Это функция, которая будет использоваться для декорирования исходной функции.

С технической точки зрения, декораторы оборачивают функцию. Так, функция, которая декорируется, называется обернутой функцией (wrapped function), а функция, которая ее декорирует, называется функцией-декоратором (decorator function). Так, декоратор log_function - это функция, которая принимает другую функцию в качестве аргумента и возвращает новую функцию, которая обертывает исходную, добавляет ей необходимый нам функционал.

Эта новая функция называется функцией-оберткой, и именно она вызывается при вызове декорированной функции.

Посмотрим на примере

-3

И вот то, что мы видим при запуске программы

-4

Наш декоратор обернул функцию, написал её имя, и вернул результат вызова функции.

Теперь, для более практичного примера, давайте создадим декоратор, который будет печатать имя вызываемой функции и аргументы, которые ей передаются. Это полезно для отладки.

-5

И вот, что мы видим при запуске

-6

В заключение

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

И напоследок, я приглашаю вас подписаться на мой блог, и благодарю вас за прочтение этой статьи. Спасибо!