Вызвать функцию имея декоратор -Python
В ряде модулей питон функции вызываются непонятным мне способом, полагаю с помощью декоратора. (Список таких модулей, которые я знаю: Django, Flask, Aiogram, Pyrogram, discord.py)
Код будет показан на примере Flask
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def index():
return 'heya'
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
Flask самостоятельно вызывает фунцию index имея лишь декоратор.
Как сделать нечто подобное?
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Ну вот я вам взяв за основу типовой декоратор за 10 минут набросал аналог:
class WebServer:
def __init__(self):
self.doit = {}
def route(self, path):
def decorator(function):
self.doit[path] = function
return decorator
def run(self):
print('Server is running')
for i,key in enumerate(self.doit):
print(i, key)
self.doit[key]()
app = WebServer()
@app.route('/')
def index():
print('Go go go!')
@app.route('/img')
def images():
print('Images!')
if __name__ == "__main__":
app.run()
Вывод:
Server is running
0 /
Go go go!
1 /img
Images!
Update: Чуть усложнил код, можно прописывать много route, они копятся в словарь, который можно потом перебрать.