Ils sont appelés décorateurs. Ce sont des fonctions appliquées à d'autres fonctions. Voici une copie de ma réponse à une question similaire.
Les décorateurs Python ajoutent des fonctionnalités supplémentaires à une autre fonction. Un décorateur italique pourrait être comme
def makeitalic(fn):
def newFunc():
return "<i>" + fn() + "</i>"
return newFunc
Notez qu'une fonction est définie dans une fonction. Ce qu'il fait essentiellement est de remplacer une fonction par celle nouvellement définie. Par exemple, j'ai cette classe
class foo:
def bar(self):
print "hi"
def foobar(self):
print "hi again"
Maintenant, disons que je veux que les deux fonctions impriment "---" après et avant qu'elles ne soient terminées. Je pourrais ajouter une impression "---" avant et après chaque déclaration d'impression. Mais parce que je ne veux me répéter, je ne ferai un décorateur
def addDashes(fn): # notice it takes a function as an argument
def newFunction(self): # define a new function
print "---"
fn(self) # call the original function
print "---"
return newFunction
# Return the newly defined function - it will "replace" the original
Alors maintenant, je peux changer ma classe à
class foo:
@addDashes
def bar(self):
print "hi"
@addDashes
def foobar(self):
print "hi again"
Pour en savoir plus sur les décorateurs, consultez http://www.ibm.com/developerworks/linux/library/l-cpdecor.html
@uberjumper - Vous devriez donner la réponse à Abhinavg si vous pensez que nous le méritons tous les deux. J'ai eu du trafic gratuit sur mon blog et ils ont moins de rep que moi de toute façon. –