私はPythonを初めて使用し、デコレータについて学んでいます。Flask をいじった後、デコレータ (引数付き) がどのように機能するかを理解するために、ルート ハンドラ/デコレータをシミュレートするコードを記述しようとしています。
以下のコードでは、スクリプトが実行されると、ルート デコレーターが自分自身を呼び出しているように見えます。私の質問は、app.route()
このスクリプトを実行したときに が呼び出される可能性はありますか?ここで実際に何が起こっているのでしょうか? index()
関数をどこでも直接呼び出していないことに注意してください。
# test.py
class Flask(object):
def __init__(self, name):
self.scriptname = name
def route(self, *rargs, **kargs):
args = list(rargs)
if kargs:
print(kargs['methods'])
def decorator(f):
f(args[0])
return decorator
app = Flask(__name__)
@app.route("/", methods = ["GET","PUT"])
def index(rt):
print('route: ' + rt)
上記は私の端末にこれを出力します:
$ python test.py
['GET', 'PUT']
route: /
任意の洞察をいただければ幸いです。