Как декорировать импортированные функции в Python?
ДЕнь добрый. Изучаю декорирование и не могу понять ...
1-ый вопрос
Есть файл с исходной функцией def name1():
Создаю файл для декорирования и пишу
from file_name import name1
def decorator(fun):
def wrapper():
"некий код"
response = fun()
return response
return wrapper
Далее не могу сделать так
@decorator
name1
или
@decorator
name1()
или
n = name1
@decorator
n
получаю ошибку и в консоле пусто. Понять не могу. Как декорировать импортированные функции?
2-ой вопрос
Есть три страницы
basic_function.py "- базовый код"
decorators.py "декораторы"
main.py "-запускаем декораторы"
basic_function
содержит функцию
@decorator
def name1()
decorators.py
содержит декоратор
def decorator(fun):
def wrapper():
"некий код"
response = fun()
return response
return wrapper
Страница main или пусть decorators.py
Как запустить decorator(fun) ?
Если надо уже name1() импортировать на страницу decorators.py , тогда вопрос
Зачем нужен @ если name1() в wrapper() легко вставляется и без декоратора?
Заранее спасибо.
Ответы (2 шт):
decorated_name1 = decorator(name1)
Или разбить по модулям так, чтобы наоборот импортировать декоратор в file_name и там декорировать name1 при создании.
- не нужно запускать decorator(fun). Если я правильно понял, то функция decorator это декоратор, а декораторы нужны для того, чтобы менять поведение других функции, а не для их отдельного выполнения. Импортировать name1 в main, выполнить её там и она выполнится отдекорированной