Pergunta de entrevista para Desenvolvedor Python

Como você escreveria um decorator que recebe os próprios argumentos?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Você adiciona uma terceira camada. A função externa recebe os argumentos do decorator e devolve o decorator de verdade, que recebe a função e devolve um wrapper que a chama. Aplique functools.wraps no wrapper para que nome, docstring e metadados de assinatura sobrevivam. Por exemplo, um decorator de retry recebe a contagem de tentativas na camada externa e o wrapper implementa o loop.

Por que os entrevistadores perguntam isso

Decorators testam se você está confortável em tratar funções como valores e em fechar sobre estado. A versão parametrizada aumenta a dificuldade porque você precisa manter três níveis na cabeça enquanto explica em voz alta. Os entrevistadores também escutam por functools.wraps, já que esquecer isso quebra introspecção, saída do help e qualquer coisa que dependa do nome da função, o que é um problema real em frameworks que registram rotas ou tasks.

Como estruturar sua resposta

  • Descreva as três camadas aninhadas em ordem.
  • Diga o que cada camada recebe e devolve.
  • Mencione functools.wraps e por que importa.
  • Ancore num decorator que você realmente escreveu.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Três camadas, e eu digo em voz alta na ordem para não me perder. A função mais externa recebe a configuração, digamos o número de retries. Ela devolve o decorator, que recebe a função alvo. Esse devolve o wrapper, que recebe star args e star star kwargs, faz o trabalho em volta da chamada e devolve o resultado. Eu sempre coloco functools.wraps no wrapper, senão a função decorada se reporta como wrapper em todo lugar, e o Flask ou o Celery vão registrar alegremente duas rotas com o mesmo nome e falhar de um jeito confuso. O que eu mais escrevi foi um retry com backoff exponencial para chamadas instáveis de upstream: três tentativas, dormindo um intervalo que dobra, relançando na última. Um refinamento útil é aceitar também a função direto, para funcionar com e sem parênteses, embora sinceramente eu costume exigir os parênteses porque a lógica de ramificação custa mais clareza do que economiza.

Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.

Veja como funciona

Perguntas de acompanhamento que você pode esperar

  • Como você faria esse decorator funcionar com funções async?
  • O que o functools.wraps copia de fato?
  • Quando um decorator baseado em classe seria melhor?

Mais perguntas para Desenvolvedor Python

Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.

Prever minhas perguntas

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot