Декоратор - это просто синтаксис c сахар:
def decorator(func):
pass
@decorator
def decorated():
pass
- это то же самое, что и:
def decorator(func):
pass
def decorated():
pass
decorated = decorator(decorated)
Имя декоратора - не более чем функция, которая принимает один аргумент. Вы даже можете использовать функцию print
в качестве декоратора. Любой допустимый вызываемый объект будет делать:
@print
def index():
pass
Очевидно, что это не имеет большого смысла, потому что:
def index():
pass
index = print(index)
В любом случае, именно так это можно реализовать в flask
class Flask:
def route(self, url):
def wrapper(func):
# register route for url
return func
return wrapper
something = Flask()
@something.route("/")
def index():
pass
something.route("/")
- это вызов функции, который возвращает реальный декоратор, который на самом деле является внутренней функцией с именем wrapper.
Так что вы даже можете сделать что-то вроде этого:
something_route_index = something.route("/")
@something_route_index
def index():
pass