Функции и классы в Python – объекты удобные. Они сами могут быть входящими и исходящими аргументами функций. Это свойство можно использовать, чтобы сделать жизнь разработчика немного приятнее.
Смысл паттерна Декоратор заключается в том, что некоторая функция заворачивается в другую функцию, приобретая от нее новые возможности. Например, так можно вести логи, вводить пред- и постусловия, добавлять методы для классов.
Декораторы в Python – это, по сути, синтаксический сахар. Для их обозначения используется символ @
.
Код ниже описывает обычный вариант приготовления сэндвича. Нужно взять что-нибудь мясное, обложить с двух сторон овощами и положить в булку.
def bread(func): def wrapper(): print "</''''''\>" func() print "<\______/>" return wrapper def vegetables(func): def wrapper(): print "#помидорка#" func() print "~лист салата~" return wrapper def sandwich(food="--ветчина--"): print food sandwich = bread(vegetables(sandwich)) sandwich() #</''''''\> # #помидорка# # --ветчина-- # ~лист салата~ #<\______/>
Изначально функция sandwich
только печатает начинку, а затем она становится полноценным бутербродом. То же самое можно сделать чуть проще:
@bread @vegetables def sandwich(food="--ветчина--"): print food sandwich()
Вместо привычного синтаксиса вызова функции используются два декоратора, которые оборачивают исходный сэндвич. Название остается прежним, но результат работы уже другой.
В Python есть несколько встроенных декораторов, например, @classmethod
, @staticmethod
, @property
.
Pydantic - это мощная библиотека проверки данных и управления настройками для Python, созданная для повышения…
Python предлагает набор библиотек, удовлетворяющих различные потребности в визуализации, будь то академические исследования, бизнес-аналитика или…
В Python для представления данных в двоичной форме можно использовать байты. Из этой статьи вы…
В этой статье рассказывается о том, что такое Werkzeug и как Flask использует его для…
При работе с датами часто возникает необходимость прибавлять к дате или вычитать из нее различные…
В этом руководстве мы рассмотрим, как добавить социальную аутентификацию с помощью GitHub и Google в…