Sobes.tech
Junior — Middle

Qual é o papel da função functools.wraps ao criar decoradores em Python?

sobes.tech IA

Resposta da IA

A função functools.wraps é usada ao criar decoradores em Python para preservar os metadados da função original que o decorador envolve. Sem usar wraps, o nome da função, a sua documentação (doc) e outros atributos são substituídos pelos atributos da função interna do decorador, o que dificulta a depuração e a documentação.

Exemplo de uso:

import functools

def my_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("Antes de chamar a função")
        result = func(*args, **kwargs)
        print("Depois de chamar a função")
        return result
    return wrapper

@my_decorator
def greet(name):
    "Função de saudação"
    print(f"Olá, {name}!")

print(greet.__name__)  # Vai mostrar 'greet', não 'wrapper'
print(greet.__doc__)   # Vai mostrar 'Função de saudação'

Assim, functools.wraps ajuda a manter as informações sobre a função decorada, melhorando a legibilidade e a manutenção do código.