devterview_$ iniciar simulação

Decorators: o que são e uma pegadinha comum

MédioPlenoRecursos da linguagem

Pergunta

O que é um decorator em Python e qual pegadinha aparece ao escrever um sem `functools.wraps`?

Resposta esperada

Um decorator é uma função que recebe outra função (ou classe) e devolve uma versão modificada — `@log` é açúcar pra `minha_func = log(minha_func)`. Usa-se pra cross-cutting concerns: logging, cache (`functools.lru_cache`), retry, timing, checagem de permissão, registro de rotas. A pegadinha: dentro do decorator você geralmente define um `wrapper` que chama a função original; se você não aplicar `@functools.wraps(func)` nesse wrapper, a função decorada perde o `__name__`, a docstring, a assinatura e as anotações — vira `wrapper` pra todo mundo que inspeciona (debugger, docs, frameworks que leem a assinatura). Outra: decorator com argumentos precisa de um nível a mais de aninhamento (`decorator(args)` retorna o decorator de verdade). E decorators rodam na definição do módulo, não na chamada — efeito colateral pesado ali atrasa o import.

Por que perguntam isso

Pergunta pleno de Python. A pegadinha do `functools.wraps` é o teste padrão. Bônus: decorator com args (nível extra) e 'roda no import'.

#decorators#functools#wraps
publicidade

Relacionadas