Share This
Связаться со мной
Крути в низ
Categories
//Для чего нужны декораторы и как их использовать?

Для чего нужны декораторы и как их использовать?

06.10.2020Category : Python

Функции и классы в 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.

    Проходите тест по Python и поймите, готовы ли вы идти на курсы
  • 8 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Связаться со мной
Close