Se llaman decoradores. Son funciones aplicadas a otras funciones. Aquí hay una copia de mi respuesta a una pregunta similar.
Los decoradores de Python agregan funcionalidad extra a otra función. Un decorador cursiva podría ser como
def makeitalic(fn):
def newFunc():
return "<i>" + fn() + "</i>"
return newFunc
Tenga en cuenta que una función se define dentro de una función. Lo que básicamente hace es reemplazar una función con la recién definida. Por ejemplo, tengo esta clase
class foo:
def bar(self):
print "hi"
def foobar(self):
print "hi again"
Ahora digo, quiero que ambas funciones impriman "---" después y antes de que estén hechas. Podría agregar una impresión "---" antes y después de cada declaración de impresión. Pero debido a que no me gusta repetirme, voy a hacer un decorador
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
Así que ahora puedo cambiar mi clase a
class foo:
@addDashes
def bar(self):
print "hi"
@addDashes
def foobar(self):
print "hi again"
Para más información sobre decoradores, comprobar http://www.ibm.com/developerworks/linux/library/l-cpdecor.html
@uberjumper - Deberías dar la respuesta a abhinavg si crees que ambos nos lo merecemos. Obtuve algo de tráfico libre en mi blog y, de todos modos, tienen menos representantes que yo. –