He notado en varios ejemplos que veo cosas como esta:

# Comments explaining code i think
@innerclass

O:

def foo():
"""
 Basic Doc String
"""
@classmethod

Buscar en Google no me lleva muy lejos, solo por una definición general de lo que es esto. Además, no puedo encontrar nada realmente en la documentación de Python.

¿Qué hacen estos?

15
UberJumper 2 jun. 2009 a las 17:13

4 respuestas

La mejor respuesta

Son decoradores.

<shameless plug> Tengo una publicación de blog sobre el tema . </shameless plug>

11
Jason Baker 2 jun. 2009 a las 13:16

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 adicional a otra función. Un decorador en 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 diga, quiero que ambas funciones impriman "---" después y antes de que estén listas. Podría agregar una impresión "---" antes y después de cada declaración de impresión. Pero como no me gusta repetirme, haré 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

Entonces ahora puedo cambiar mi clase a

class foo:
    @addDashes
    def bar(self):
        print "hi"

    @addDashes
    def foobar(self):
        print "hi again"

Para obtener más información sobre decoradores, consulte http://www.ibm.com/developerworks /linux/library/l-cpdecor.html

24
Abhinav Gupta 2 jun. 2009 a las 13:17

Con

@function
def f():
    pass

Simplemente envuelve function alrededor de f(). function se llama decorador.

Es solo azúcar sintáctico para lo siguiente:

def f():
    pass
f=function(f)
5
wr. 2 jun. 2009 a las 13:17

Es una decorator sintaxis.

1
SilentGhost 2 jun. 2009 a las 13:15