Métodos dunder são os métodos especiais com underscores duplos para os quais a sintaxe do Python despacha. Chamar len num objeto invoca dunder len, o operador de mais invoca dunder add, e um loop for invoca dunder iter. Implementá-los faz sua classe se comportar como um tipo nativo, então os protocolos da linguagem funcionam nos seus objetos em vez de você inventar nomes de métodos customizados.
Por que os entrevistadores perguntam isso
Isso distingue quem escreve Python de quem escreve outra linguagem com sintaxe de Python. O entrevistador quer ouvir a ideia de protocolo: que duck typing no CPython é implementado através desses ganchos, e que o instinto certo é implementar o protocolo em vez de pendurar um método chamado to_string. Saber qual dunder escolher, como repr versus str, sinaliza fluência do dia a dia.
Como estruturar sua resposta
- Defina-os como ganchos que a sintaxe chama.
- Dê dois ou três mapeamentos concretos.
- Explique a ideia de protocolo por trás deles.
- Cite os que você implementa com mais frequência.
Exemplo de resposta
São os ganchos que o interpretador chama quando você usa sintaxe. Acesso por colchetes vai para dunder getitem, a palavra in vai para dunder contains, igualdade vai para dunder eq, e assim por diante. O ponto é que o Python define comportamento como protocolos em vez de interfaces que você herda, então se meu objeto implementa dunder iter e dunder next ele é um iterador, ponto final, sem classe base nenhuma. Na prática os que eu mais implemento são repr, eq e hash. O repr especialmente, porque um bom repr mostrando os campos identificadores transforma uma sessão inútil de depuração numa de cinco minutos, enquanto o object at 0x7f padrão não te diz nada. Sou cuidadoso com eq e hash juntos, já que definir eq sem hash deixa as instâncias não hasheáveis e elas param de funcionar como chaves de dict silenciosamente. Num modelo de domínio que construí, adicionar dunder lt deixou a gente ordenar registros com o sorted nativo em vez de passar uma função key em todo lugar.
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 funcionaPerguntas de acompanhamento que você pode esperar
- Qual é a diferença entre repr e str?
- Por que eq e hash precisam concordar?
- Como o dunder getattr difere do getattribute?
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