Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Introdução ao functools.wraps | Dominando Iteradores e Decoradores em Python
Conceitos de Programação Funcional em Python

bookIntrodução ao functools.wraps

Deslize para mostrar o menu

Ao criar seus próprios decoradores, muitas vezes você perde informações importantes sobre a função original, como seu nome, docstring e módulo. Isso ocorre porque o decorador substitui a função original por uma nova função wrapper. Para resolver esse problema, utilize o decorador functools.wraps da biblioteca padrão do Python.

Ao aplicar functools.wraps à sua função wrapper, você preserva os metadados da função original. Isso significa:

  • O atributo __name__ da função permanece igual ao da original;
  • A string __doc__ da função é mantida intacta;
  • O atributo __module__ e outros metadados são preservados.

Preservar metadados é importante para depuração, geração de documentação e ferramentas que dependem de introspecção de funções. Sem o functools.wraps, rastreamentos de pilha e utilitários de ajuda podem exibir informações confusas ou incorretas, tornando o código mais difícil de manter e depurar.

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

É possível observar como utilizar o functools.wraps para preservar os metadados da função original ao criar um decorador. Ao aplicar functools.wraps ao wrapper, garante-se que atributos como o nome e a docstring da função não sejam perdidos após a decoração.

question mark

Por que é importante usar functools.wraps ao escrever decoradores em Python?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 7

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Seção 4. Capítulo 7
some-alt