Curso de python nivel medio

Un decorador es una función que modifica el comportamiento de otra función o clase. Es una manera de envolver una función con otra para añadirle funcionalidad adicional, sin modificar su código original.

¿Cómo funcionan?

En Python, las funciones son objetos de primera clase, lo que significa que pueden ser pasadas como argumentos a otras funciones. Un decorador es, de hecho, una función que toma otra función como argumento, la modifica y devuelve una nueva función que la reemplaza.

Ejemplo básico de decorador:

1def mi_decorador(func):
2    def wrapper():
3        print("Antes de llamar a la función.")
4        func()
5        print("Después de llamar a la función.")
6    return wrapper
7
8def saludo():
9    print("¡Hola!")
10
11# Usando el decorador manualmente
12saludo = mi_decorador(saludo)
13
14saludo()
Salida de Consola!:
Antes de llamar a la función.
¡Hola!
Después de llamar a la función.

Usando la sintaxis de decoradores

Python tiene una sintaxis especial para aplicar decoradores de manera más elegante. Se usa el símbolo @ seguido del nombre del decorador justo encima de la definición de la función a decorar:

1def mi_decorador(func):
2    def wrapper():
3        print("Antes de llamar a la función.")
4        func()
5        print("Después de llamar a la función.")
6    return wrapper
7
8@mi_decorador
9def saludo():
10    print("¡Hola!")
11
12saludo()
Salida de Consola!:
Antes de llamar a la función.
¡Hola!
Después de llamar a la función.

Esto es equivalente a hacer:

1saludo = mi_decorador(saludo)

Decoradores con parámetros

Si la función decorada toma parámetros, el decorador debe ser modificado para pasárselos adecuadamente:

1def mi_decorador(func):
2    def wrapper(*args, **kwargs):
3        print("Antes de llamar a la función.")
4        result = func(*args, **kwargs)
5        print("Después de llamar a la función.")
6        return result
7    return wrapper
8
9@mi_decorador
10def saludo(nombre):
11    print(f"¡Hola, {nombre}!")
12
13saludo("Juan")
Salida de Consola!:
Antes de llamar a la función.
¡Hola, Juan!
Después de llamar a la función.
  • Loading...