Создание псевдонима для декораторов функций в Python
В Python функции-декораторы снова являются функциями, которые являются гражданами первого класса, что создает ожидание гибкого назначения и передачи. В приведенном ниже примере
def auth_token_not_expired(function):
@auth_token_right
def wrapper(req):
# Some validations
return function(req)
return wrapper
Теперь я попытался присвоить эту функцию декоратора другой переменной в качестве псевдонима
login_required = auth_token_not_expired
После проверки назначение происходит успешно, однако, когда я вызываю его с помощью @login_required
синтаксис это вызывает NameError
Exception Type: NameError
Exception Value:
name 'login_required' is not defined
Как мы регистрируем это login_required
переменная тоже как декоратор?
1 ответ
Решение
Вы находитесь в неправильной сфере.
Адаптируем пример из Как создать цепочку функциональных декораторов?
def makeitalic(fn):
def wrapped():
return "<i>" + fn() + "</i>"
return wrapped
@makeitalic
def hello():
return "hello world"
hello() ## returns <i>hello world</i>
Теперь сделайте задание:
mi = makeitalic
@mi
def helloit():
return "hello world"
helloit() ## returns <i>hello world</i>