Question d'entretien pour Développeur Python

Comment Python décide-t-il quelle méthode appeler en héritage multiple ?

Ce que le recruteur cherche à évaluer, comment structurer votre réponse et un exemple parlé à adapter.

Réponse rapide

Python calcule un ordre de résolution des méthodes avec la linéarisation C3, qui préserve l'ordre des bases propre à chaque classe et garantit qu'une sous-classe apparaît avant ses parents. La recherche d'attribut parcourt cette liste et prend la première correspondance. Vous pouvez l'inspecter avec la méthode mro, et super suit le MRO de l'instance réelle, pas seulement la classe parente immédiate.

Pourquoi les recruteurs posent cette question

Les mixins sont partout dans Django et DRF, donc les recruteurs veulent savoir si vous pouvez prédire quelle implémentation l'emporte et déboguer le cas où un mixin en écrase une en silence. Le vrai signal est de comprendre que super n'est pas un synonyme de parent ; c'est la classe suivante dans le MRO de l'instance. Ce malentendu est à la racine de la plupart des bugs d'héritage coopératif sur lesquels les gens passent des après-midi.

Comment structurer votre réponse

  • Nommez la linéarisation C3 et ce qu'elle garantit.
  • Dites que la recherche prend la première correspondance dans cet ordre.
  • Corrigez la lecture erronée courante de super.
  • Mentionnez comment vous inspectez le MRO en pratique.

Exemple de réponse

Exemple parlé, à la première personne

Python construit un ordre linéaire de la classe et de tous ses ancêtres avec C3, puis la recherche d'attribut parcourt cette liste de haut en bas et s'arrête à la première trouvaille. C3 garantit deux choses : une classe vient toujours avant ce dont elle hérite, et l'ordre relatif dans lequel vous avez écrit vos bases est préservé. Si ces deux contraintes ne peuvent pas être satisfaites ensemble, la définition de la classe elle-même lève un TypeError à l'import, ce qui est une bonne propriété puisque vous le découvrez tout de suite plutôt qu'à l'exécution. La partie que je prends soin de dire, c'est que super ne veut pas dire parent. Il veut dire l'entrée suivant la classe courante dans le MRO de l'instance, ce qui explique qu'un mixin qui appelle super puisse atterrir sur une classe sœur dont il n'a jamais hérité. C'est toute la base de l'héritage multiple coopératif dans les vues basées sur les classes de Django. Quand quelque chose de surprenant arrive, j'affiche la liste mro, et la réponse est en général évidente en quelques secondes parce que l'ordre des mixins dans l'instruction class était inversé.

Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.

Voir comment ça marche

Questions de relance à prévoir

  • Que se passe-t-il si C3 ne peut pas produire un ordre cohérent ?
  • Pourquoi les mixins Django passent-ils avant la classe de vue de base ?
  • Comment super se comporte-t-il dans une méthode de classe ?

Autres questions pour Développeur Python

Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.

Prédire mes questions

Répétez les questions difficiles avant qu'on vous les pose

Entraînez-vous avec un copilote en direct, puis présentez-vous prêt. Un Session Pass à $29 vous accompagne pendant l'entretien, sans abonnement et sans engagement.

Obtenir GhostPilot