Decoradores en Python: Mejora y Extensión de Funciones

  Funciones en Python

Los decoradores en Python son una herramienta poderosa que te permite modificar o extender el comportamiento de funciones y métodos sin cambiar su código original. Son ampliamente utilizados para añadir funcionalidades, como la autenticación, el registro o la medición del tiempo de ejecución de funciones.

¿Qué es un Decorador?

Un decorador es una función que toma otra función como argumento y devuelve una nueva función que, por lo general, amplía o modifica el comportamiento de la función original. Esto se logra mediante el uso de la sintaxis @decorador justo antes de la definición de la función que se va a decorar.

Ejemplo Básico de un Decorador

Aquí hay un ejemplo simple que muestra cómo crear y usar un decorador:

1. Definiendo un Decorador

python
def mi_decorador(func):
  def envoltura():
      print("Algo se está haciendo antes de la función.")
      func()
      print("Algo se está haciendo después de la función.")
  return envoltura

2. Decorador Simple

Este decorador, llamado mensaje, añadirá un mensaje antes y después de la ejecución de la función.

python
def mensaje(func):
  def envoltura():
      print("Ejecutando la función...")
      func()  # Llama a la función decorada
      print("Función ejecutada.")
  return envoltura

@mensaje
def saludar():
  print("¡Hola, Mundo!")

saludar()

# Salida:
# Ejecutando la función...
# ¡Hola, Mundo!
# Función ejecutada.
  Explicación

  1. Definir el Decorador mensaje: Este decorador toma una función como argumento y define una nueva función interna llamada envoltura.
  2. Función Decorada saludar: Esta función simplemente imprime un saludo.
  3. Uso del Decorador: Al decorar saludar con @mensaje, al llamarla se ejecuta primero el código del decorador, que imprime mensajes antes y después de ejecutar saludar.

3. Usando el Decorador

python
@mi_decorador
def saludar():
  print("¡Hola, Mundo!")

saludar()

# Salida:
# Algo se está haciendo antes de la función.
# ¡Hola, Mundo!
# Algo se está haciendo después de la función.

Decoradores con Argumentos

Los decoradores también pueden manejar funciones que aceptan argumentos. Para esto, puedes ajustar el decorador para que acepte cualquier número de argumentos:

Ejemplo de un Decorador con Argumentos

python
def decorador_con_argumentos(func):
  def envoltura(*args, **kwargs):
      print("Llamando a la función con argumentos:", args, kwargs)
      return func(*args, **kwargs)
  return envoltura

@decorador_con_argumentos
def sumar(a, b):
  return a + b

resultado = sumar(3, 5)
print("Resultado:", resultado)

# Salida:
# Llamando a la función con argumentos: (3, 5) {}
# Resultado: 8
  Decoradores Incorporados en Python

Python viene con varios decoradores incorporados que son útiles, como:

  • @staticmethod: Define un método estático en una clase.
  • @classmethod: Define un método de clase que puede acceder a la clase en lugar de a la instancia.
  • @property: Permite definir métodos como propiedades de clase.

  Conclusión

Los decoradores en Python son una manera elegante de modificar el comportamiento de funciones y métodos. Facilitan la reutilización de código y la separación de preocupaciones. Al dominar los decoradores, puedes escribir código más limpio y mantener tus funciones enfocadas en su propósito principal.