Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Introducción a functools.wraps | Dominio de los Iteradores y Decoradores en Python
Conceptos de Programación Funcional en Python

bookIntroducción a functools.wraps

Desliza para mostrar el menú

Al escribir tus propios decoradores, a menudo se pierde información importante sobre la función original, como su nombre, docstring y módulo. Esto ocurre porque el decorador reemplaza la función original con una nueva función envolvente. Para solucionar esto, utiliza el decorador functools.wraps de la biblioteca estándar de Python.

Al aplicar functools.wraps a tu función envolvente, se conserva la metadata de la función original. Esto significa:

  • El atributo __name__ de la función permanece igual que el original;
  • La cadena __doc__ de la función se mantiene intacta;
  • El atributo __module__ y otros metadatos se preservan.

Conservar la metadata es importante para la depuración, la generación de documentación y las herramientas que dependen de la introspección de funciones. Sin functools.wraps, los rastreos de pila y las utilidades de ayuda pueden mostrar información confusa o incorrecta, lo que dificulta el mantenimiento y la depuración del código.

1234567891011121314151617181920212223
from functools import wraps # Define a decorator that will wrap another function def my_decorator(func): # Use @wraps to preserve metadata from the original function @wraps(func) def wrapper(*args, **kwargs): # This code runs before the original function print("Running the decorated function...") return func(*args, **kwargs) # Call the original function return wrapper # Return the wrapper as the new decorated function # Apply the decorator to a function def say_hello(): """Prints a hello message.""" print("Hello!") say_hello = my_decorator(say_hello) say_hello() # Print out the preserved metadata print(f"Function name: {say_hello.__name__}") # Name is preserved print(f"Docstring: {say_hello.__doc__}") # Docstring is preserved
copy

Puedes ver cómo usar functools.wraps para preservar la metadata de la función original al crear un decorador. Al aplicar functools.wraps a tu función envolvente, aseguras que atributos como el nombre y el docstring de la función no se pierdan después de la decoración.

question mark

¿Por qué es importante usar functools.wraps al escribir decoradores en Python?

Selecciona la respuesta correcta

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 7

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Sección 4. Capítulo 7
some-alt