O Python calcula uma ordem de resolução de métodos usando a linearização C3, que preserva a ordem de bases de cada classe e garante que uma subclasse apareça antes dos pais dela. A busca de atributo percorre essa lista e pega o primeiro match. Você pode inspecionar com o método mro, e o super segue o MRO da instância real, não só a classe pai imediata.
Por que os entrevistadores perguntam isso
Mixins estão por toda parte no Django e no DRF, então os entrevistadores querem saber se você consegue prever qual implementação vence e depurar quando um mixin sobrescreve algo em silêncio. O sinal real é entender que super não é sinônimo de pai; é a próxima classe no MRO da instância. Esse mal-entendido é a raiz da maioria dos bugs de herança cooperativa em que as pessoas perdem tardes inteiras.
Como estruturar sua resposta
- Cite a linearização C3 e o que ela garante.
- Diga que a busca pega o primeiro match nessa ordem.
- Corrija a leitura errada mais comum do super.
- Mencione como você inspeciona o MRO na prática.
Exemplo de resposta
O Python monta uma ordenação linear da classe e de todos os ancestrais dela usando C3, e aí a busca de atributo percorre essa lista de cima para baixo e para no primeiro acerto. O C3 garante duas coisas: uma classe sempre vem antes de qualquer coisa da qual ela herda, e a ordem relativa em que você escreveu as bases é preservada. Se essas duas restrições não puderem ser satisfeitas juntas, a própria definição da classe levanta um TypeError no import, o que é uma propriedade boa porque você descobre na hora em vez de em runtime. A parte que eu faço questão de dizer é que super não significa pai. Significa a próxima entrada depois da classe atual no MRO da instância, e é por isso que um mixin chamando super pode cair numa classe irmã da qual ele nunca herdou. Essa é a base inteira da herança múltipla cooperativa nas class based views do Django. Quando acontece algo surpreendente eu imprimo a lista do mro, e a resposta costuma ser óbvia em segundos porque a ordem dos mixins na instrução da classe estava invertida.
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
- O que acontece se o C3 não conseguir produzir uma ordem consistente?
- Por que os mixins do Django vêm antes da classe base da view?
- Como o super se comporta dentro de um class method?
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