Как декорировать импортированные функции в 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 шт):

Автор решения: Alpensin

decorated_name1 = decorator(name1)

Или разбить по модулям так, чтобы наоборот импортировать декоратор в file_name и там декорировать name1 при создании.

→ Ссылка
Автор решения: Tryd0g0lik
  1. не нужно запускать decorator(fun). Если я правильно понял, то функция decorator это декоратор, а декораторы нужны для того, чтобы менять поведение других функции, а не для их отдельного выполнения. Импортировать name1 в main, выполнить её там и она выполнится отдекорированной
→ Ссылка