Найти тему
Fakeminer

Декораторы или "наследование функций" в языке Python

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

Привет, кстати.

Сначала я написал функцию, которая принимает параметр sun и выводит в консоль. Но предположим, что мне нужно проверить не пустая ли переменная, которую печатает функция. Тогда мне понадобится декоратор.

Я заранее создал файл addons.py и импортировал его в основной файл, теперь в файле addons.py я напишу вот такой код:

-2

По факту, мы просто взяли нашу функцию в другую функцию, дальше выполнили что-то, вызвали функцию и вызвали что-то еще.

Давайте организуем проверку на пустоту в переменной:

-3

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

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

Для этого нужно:

  • -Взломать Пентагон-
  • -Изобрести машину времени-
  • Указать декоратор через знак @

Но так как наш декоратор находится в другом файле, многие уже знают, надо указать файл.декоратор. Без двоеточий, без скобок, без точек с запятой, просто над функцией и все, кстати, больше нигде нельзя.

-4

И теперь ниже мы видим, что у нас вышла ошибка Пустая переменная, но что будет, если мы все же укажем туда значение?

-5

О чудо, вывелось Hello World! и так вы можете проверять все, что угодно. Или, например, после выхода из функции, обнулять какую-нибудь переменную, тут уж дело ваше, однако это реально можно удобно применить на практике

На этом сегодня все, да прибудет с вами декорирование!

*Наследование функций - такого не существует, и декорирование точно не является наследованием!