Exemple
class Pizza(object):
def __init__(self):
self.toppings = []
def __call__(self, topping):
# When using '@instance_of_pizza' before a function definition
# the function gets passed onto 'topping'.
self.toppings.append(topping())
def __repr__(self):
return str(self.toppings)
pizza = Pizza()
@pizza
def cheese():
return 'cheese'
@pizza
def sauce():
return 'sauce'
print pizza
# ['cheese', 'sauce']
Cela montre que le function
/ method
/ class
que vous définissez après un décorateur est simplement transmis comme un argument
à la function
/ method
immédiatement après le @
signe.
Première observation
Le micro-cadre Flacon présente décorateurs depuis le tout début dans le format suivant :
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
Cela se traduit à son tour par :
rule = "/"
view_func = hello
# They go as arguments here in 'flask/app.py'
def add_url_rule(self, rule, endpoint=None, view_func=None, **options):
pass
Réaliser cela m'a finalement permis de me sentir en paix avec Flask.