Repaso
English
PythonIntermedioPY-07

¿Para qué se usa functools.wraps dentro de un decorator?

Opciones

  1. Hace que el wrapper se ejecute más rápido al saltarse una llamada
  2. Copia __name__ y __doc__ de la función original (Opción correcta)
  3. Permite que el decorator acepte argumentos cuando se aplica al código
  4. Guarda en caché el resultado de la función entre dos llamadas

Respuesta

Copia los metadatos (__name__, __doc__, __wrapped__) de la función original al wrapper

Por qué

Un decorator reemplaza tu función por otra nueva (el wrapper). Sin @wraps, el resultado parece el wrapper: su nombre pasa a ser 'wrapper' y tu docstring desaparece.

Eso confunde a los logs, los debuggers, las herramientas de documentación y los frameworks que usan el nombre de la función.

@functools.wraps(func) copia el nombre, el docstring y otros metadatos de la función original al wrapper.

Recuerda

Pon siempre @functools.wraps(func) en el wrapper interno.

Términos clave

Practica esta pregunta en Repaso