¿Cómo se crea un decorador en Python?

Creando un Decorador en Python

Las decoraciones en Python son una herramienta poderosa que nos permite modificar el comportamiento de las funciones o de las clases. Los decoradores se crean definiendo una función que toma otra función como argumento. Vamos a detallarlo a continuación.

Un decorador es una función de orden de superior (una función que toma otra función y extiende el comportamiento de esta última sin modificarla explícitamente). Es una potente forma de cambiar y mejorar el comportamiento de una función o método existente, añadiendo cierta funcionalidad antes, después o incluso alrededor del código original.

Vamos a ver cómo podemos crear un decorador. Para comprender cómo funciona, se necesita saber que en Python, las funciones son ciudadanos de primera clase, es decir, pueden ser pasadas como argumentos a otras funciones, pueden ser devueltas por otras funciones y pueden ser definidas dentro de otras funciones.

def mi_decorador(funcion):
    def envoltorio():
        print("Esto se añade antes de la ejecución de la función.")
        funcion()
        print("Esto se añade después de la ejecución de la función.")
    return envoltorio

def mi_funcion():
    print("Esta es mi función.")
  
mi_funcion = mi_decorador(mi_funcion)

mi_funcion()

En este ejemplo, mi_decorador es una función de orden superior porque toma como argumento otra función, mi_funcion. Internamente define y luego devuelve otra función (envoltorio), que es una versión modificada de mi_funcion. Cuando ejecutas mi_funcion, ahora ves el comportamiento modificado: las líneas de los mensajes adicionales antes y después del mensaje de mi_funcion.

Debe notarse que la respuesta "Usando la sintaxis @decorator sobre una función" es a medias correcta. Esta sintaxis es un atajo para aplicar el decorador a una función, equivalente a mi_funcion = mi_decorador(mi_funcion). Pero solo aplica el decorador a la función, no lo crea.

Los decoradores pueden ser una forma poderosa y eficaz de agregar funcionalidades comunes a varias funciones y métodos en su código, lo que ayuda a adherirse al principio DRY (Don't Repeat Yourself) y hace que el código sea más fácil de mantener y de entender.

¿Te resulta útil?