Decoradores de Python Explicados con Ejemplos

Mejora tus Funciones con Decoradores

Aprende a extender y modificar el comportamiento de tus funciones usando decoradores Python. Este tutorial explica el concepto, proporciona ejemplos prácticos y le muestra cómo escribir sus propios decoradores.

Programación
Autor/a
Afiliación
Fecha de publicación

5 de febrero de 2024

Fecha de modificación

9 de mayo de 2025

Palabras clave

Decoradores en Python, decoradores en Python

Introducción

Los decoradores de Python son una poderosa herramienta que te permite extender y modificar el comportamiento de las funciones sin modificar permanentemente su código. Proporcionan una forma limpia y expresiva de añadir funcionalidad a las funciones, haciendo que el código sea más modular y fácil de mantener.

En este tutorial, explicaremos el concepto de los decoradores, le mostraremos cómo funcionan y le proporcionaremos ejemplos prácticos para ayudarle a incorporar decoradores en sus propios proyectos.



Qué son los Decoradores?

Un decorador en Python es una función que toma otra función como argumento, le añade alguna funcionalidad y devuelve una nueva función. Los decoradores se utilizan a menudo para:
- Logging: Registrar cuándo se llaman las funciones.
- Control de acceso:Comprobación de permisos antes de ejecutar una función.
- Caching: Almacenamiento de resultados de llamadas a funciones costosas.
- Timing: Medición del tiempo de ejecución de las funciones.

Cómo funcionan los decoradores

Cuando aplicas un decorador a una función utilizando la sintaxis @decorator_name, Python pasa la función decorada al decorador. El decorador devuelve entonces una nueva función que mejora o modifica el comportamiento de la función original.

Ejemplo básico de decorador

A continuación se muestra un ejemplo sencillo que demuestra cómo crear y utilizar un decorador para añadir comportamiento antes y después de una llamada a una función.

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Antes de la llamada a la función")
        result = func(*args, **kwargs)
        print("Después de la llamada a la función")
        return result
    return wrapper

@my_decorator
def say_hello(name):
    print(f"Hello, {name}!")

say_hello("Alice")

Resultados:

Antes de la llamada a la función
Hola, Alice!
Después de la llamada a la función

Ejemplo avanzado: Decorador con argumentos

Los decoradores también pueden ser diseñados para aceptar argumentos, lo que permite modificaciones de comportamiento aún más flexibles.

def repeat(n):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for i in range(n):
                print(f"Repetir los {i+1}/{n}:")
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

@repeat(3)
def greet(name):
    print(f"Hello, {name}!")

greet("Bob")

Resultados:

Repetir los 1/3:
Hola, Bob!
Repetir los 2/3:
Hola, Bob!
Repetir los 3/3:
Hola, Bob!

Mejores prácticas para el uso de decoradores

  • Mantén la sencillez:
    Escribe decoradores pequeños y centrados que hagan bien una cosa.

  • Usar functools.wraps:
    Cuando escriba decoradores, utilice functools.wraps para preservar los metadatos de la función original.

    import functools
    
    def my_decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            print("Antes de la llamada a la función")
            result = func(*args, **kwargs)
            print("Después de la llamada a la función")
            return result
        return wrapper
  • Documente sus decoradores:
    Comentar y documentar claramente el propósito y uso de cada decorador.

Conclusión

Los decoradores en Python proporcionan una forma flexible y elegante de modificar el comportamiento de las funciones. Al dominar los decoradores, puedes escribir código más modular y reutilizable, mejorar la funcionalidad sin duplicar código e implementar problemas transversales como el registro y la gestión de errores de forma más limpia. Experimente con los ejemplos proporcionados aquí, e intente crear sus propios decoradores para ver cómo pueden simplificar sus tareas de codificación.

Lecturas adicionales

Feliz codificación, y disfruta mejorando tus funciones con decoradores!

Explorar más artículos

Nota

Aquí hay más artículos de la misma categoría para ayudarte a profundizar en el tema.

placeholder

placeholder
No hay resultados
Volver arriba

Reutilización

Cómo citar

BibTeX
@online{kassambara2024,
  author = {Kassambara, Alboukadel},
  title = {Decoradores de Python Explicados con Ejemplos},
  date = {2024-02-05},
  url = {https://www.datanovia.com/es/learn/programming/python/advanced/decorators-explained.html},
  langid = {es}
}
Por favor, cita este trabajo como:
Kassambara, Alboukadel. 2024. “Decoradores de Python Explicados con Ejemplos.” February 5, 2024. https://www.datanovia.com/es/learn/programming/python/advanced/decorators-explained.html.