Pergunta de entrevista para Desenvolvedor Python

Quando você escolheria um dataclass em vez de um NamedTuple ou um modelo Pydantic?

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

Resposta rápida

Use dataclass para estruturas internas mutáveis onde você quer atributos comuns e init, repr e eq de graça. Use NamedTuple quando quiser um registro imutável, parecido com tupla, que desempacota e faz hash barato. Use Pydantic nas fronteiras do sistema, onde você precisa de validação em runtime, coerção e serialização de dados chegando de HTTP, arquivos de configuração ou filas.

Por que os entrevistadores perguntam isso

Existem quatro ou cinco jeitos de declarar um registro no Python moderno, e o entrevistador quer saber se você escolhe deliberadamente em vez de pegar o que usou por último. A sacada que eles esperam ouvir é que type hints num dataclass não são aplicados em runtime, então validação é exatamente o que o Pydantic te compra, e que pagar validação em cada objeto interno é trabalho desperdiçado.

Como estruturar sua resposta

  • Ordene os três por onde os dados vêm.
  • Diga que hints de dataclass não são aplicados em runtime.
  • Dê o ângulo de imutabilidade e hashing do NamedTuple.
  • Diga qual é o seu padrão e a regra da fronteira.

Exemplo de resposta

Exemplo falado, em primeira pessoa

Minha regra é que o Pydantic guarda as bordas e os dataclasses vivem por dentro. Qualquer coisa cruzando uma fronteira, um corpo de request, uma configuração de ambiente, uma mensagem vinda de uma fila, ganha um modelo Pydantic porque eu quero aquilo validado e coagido uma vez, de forma barulhenta, no ponto em que chega. Tudo depois disso pode ser um dataclass simples com slots ligado, já que eu sei que os dados estão bons e não quero pagar custo de validação em cada objeto que construo num loop. O que as pessoas esquecem é que anotar um campo de dataclass como int não faz nada em runtime, então passe uma string e ele guarda a string numa boa. NamedTuple eu uso menos, principalmente para registros pequenos e imutáveis que precisam ser chaves de dict ou ser desempacotados, tipo um par de coordenadas ou uma chave de cache. Num serviço em que trabalhei, trocar um caminho quente interno de modelos Pydantic para dataclasses com slots cortou o tempo de um job em lote de forma perceptível, puramente por pular a revalidação de dados que já tínhamos checado.

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

  • O que o slots igual a True faz num dataclass?
  • Como você torna um dataclass imutável?
  • O que mudou entre o Pydantic v1 e o v2?

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