Si chiamano decoratori. Sono funzioni applicate ad altre funzioni. Ecco una copia della mia risposta a una domanda simile.
I decoratori Python aggiungono funzionalità aggiuntive a un'altra funzione. Un corsivo decoratore potrebbe essere come
def makeitalic(fn):
def newFunc():
return "<i>" + fn() + "</i>"
return newFunc
noti che una funzione è definita all'interno di una funzione. Quello che fa fondamentalmente è sostituire una funzione con quella appena definita. Ad esempio, ho questa classe
class foo:
def bar(self):
print "hi"
def foobar(self):
print "hi again"
Ora dicono, voglio entrambe le funzioni per la stampa "---" dopo e prima di essere fatto. Potrei aggiungere una stampa "---" prima e dopo ogni dichiarazione di stampa. Ma perché non mi piace ripetermi, farò un decoratore
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
Così ora posso cambiare la mia classe per
class foo:
@addDashes
def bar(self):
print "hi"
@addDashes
def foobar(self):
print "hi again"
Per ulteriori informazioni su decoratori, controllare http://www.ibm.com/developerworks/linux/library/l-cpdecor.html
fonte
2009-06-02 13:17:30
@uberjumper - Dovresti dare la risposta ad abhinavg se senti che ci meritiamo entrambi. Ho avuto del traffico gratuito sul mio blog e hanno comunque meno rappresentanti di me. –