Quantcast
Channel: Prisoner Number Six » Programming
Viewing all articles
Browse latest Browse all 10

Decoradores en Python

$
0
0

Los decoradores nos permiten agregar funcionalidad adicional a una función o clase. En Python hay algunos decoradores definidos por el propio lenguaje. Así, cuando queremos declarar a una función de una clase como “estática” o “método de clase” podemos usar un decorador. Las “properties” o propiedades también usan el mecanismo del decorador.

Anteriormente, antes de los decoradores, la sintaxis para declarar una función estática sin decorador era la siguiente:

def mi_funcion():
    pass
mi_funcion = staticmethod(mi_funcion)

Con el decorador, la sintaxis cambia y queda de la siguiente manera:

@staticmethod
def mi_funcion():
    pass

¿Como funciona un decorador?

Un decorador es una función que recibe como parámetro la función a decorar y define en su cuerpo a otra función que recibe los parámetros que va a usar la función a decorar (lioso ¿verdad?). Al final se termina devolviendo la función definida en el cuerpo del decorador. Un ejemplo lo explica mejor:

def decorador(funcion_a_decorar):
    def funcion_definida_dentro_del_decorador(*args):
        print "decorador: aqui podriamos introducir las instrucciones del decorador"
        funcion_a_decorar(args[0]+1, args[1]+1)
        print "seguimos en el decorador"
    return funcion_definida_dentro_del_decorador

@decorador
def a_decorar(x,y):
    print x+y

Cuando se define el decorador vemos que recibe como parámetros la función a decorar y que dentro define una función que va a retornar.

Dentro de la función que retorna (funcion_definida…) se hace uso de la funcion_a_decorar porque obviamente se ha de ejecutar su contenido. Como podemos ver a continuación de la ejecución de la función a decorar se siguen ejecutando instrucciones del decorador.

Si observamos, la función de dentro del decorador recibe los parámetros (en este caso como no sabemos de antemano su número usamos una lista) de la función a decorar.

¿Que usos podríamos darle?

Por ejemplo, en una aplicación web, podemos usar un decorador en las funciones de administración para comprobar que efectivamente el usuario es administrador.
Otro uso podría ser el de ejecutar una traza de debug cuando se va a entrar en la función a estudiar.



Viewing all articles
Browse latest Browse all 10

Trending Articles