Interviewfrage für Python-Entwickler

Wie entscheidet Python bei Mehrfachvererbung, welche Methode aufgerufen wird?

Worauf der Interviewer abzielt, wie du deine Antwort aufbaust und ein gesprochenes Beispiel zum Anpassen.

Kurzantwort

Python berechnet eine Method Resolution Order über die C3-Linearisierung, die die eigene Reihenfolge der Basisklassen jeder Klasse bewahrt und garantiert, dass eine Subklasse vor ihren Eltern erscheint. Die Attributsuche läuft diese Liste ab und nimmt den ersten Treffer. Du kannst sie mit der Methode mro inspizieren, und super folgt der MRO der tatsächlichen Instanz, nicht bloß der direkten Elternklasse.

Warum Interviewer das fragen

Mixins sind in Django und DRF überall, also wollen Interviewer wissen, ob du vorhersagen kannst, welche Implementierung gewinnt, und es debuggen kannst, wenn ein Mixin still etwas überschreibt. Das eigentliche Signal ist zu verstehen, dass super kein Synonym für Elternklasse ist; es ist die nächste Klasse in der MRO der Instanz. Dieses Missverständnis ist die Wurzel der meisten Bugs bei kooperativer Vererbung, an denen Leute Nachmittage verbringen.

So baust du deine Antwort auf

  • Nenn C3-Linearisierung und was sie garantiert.
  • Sag, dass die Suche den ersten Treffer in dieser Reihenfolge nimmt.
  • Korrigiere das übliche Missverständnis von super.
  • Erwähn, wie du die MRO in der Praxis inspizierst.

Beispielantwort

Gesprochenes Beispiel, erste Person

Python baut über C3 eine lineare Ordnung aus der Klasse und all ihren Vorfahren, dann läuft die Attributsuche diese Liste von oben nach unten ab und stoppt beim ersten Treffer. C3 garantiert zwei Dinge: eine Klasse kommt immer vor allem, von dem sie erbt, und die relative Reihenfolge, in der du deine Basisklassen geschrieben hast, bleibt erhalten. Lassen sich beide Bedingungen nicht erfüllen, wirft die Klassendefinition selbst zur Importzeit einen TypeError, was eine schöne Eigenschaft ist, weil du es sofort erfährst statt zur Laufzeit. Der Teil, den ich unbedingt sage, ist, dass super nicht Elternklasse bedeutet. Es bedeutet der nächste Eintrag nach der aktuellen Klasse in der MRO der Instanz, weshalb ein Mixin, das super aufruft, bei einer Geschwisterklasse landen kann, von der es nie geerbt hat. Genau darauf beruht kooperative Mehrfachvererbung in Djangos klassenbasierten Views. Wenn etwas Überraschendes passiert, printe ich die mro-Liste, und die Antwort ist meist in Sekunden offensichtlich, weil die Mixin-Reihenfolge im class-Statement verdreht war.

Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.

So funktioniert es

Nachfragen, mit denen du rechnen solltest

  • Was passiert, wenn C3 keine konsistente Reihenfolge erzeugen kann?
  • Warum stehen Django-Mixins vor der Basis-View-Klasse?
  • Wie verhält sich super innerhalb einer Klassenmethode?

Weitere Fragen für Python-Entwickler

Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.

Meine Fragen vorhersagen

Üb die harten Fragen, bevor sie gestellt werden

Trainier mit einem Live-Copiloten und geh dann vorbereitet rein. Ein $29 Session Pass bringt dich durch das Vorstellungsgespräch, ohne Abo und ohne Bindung.

GhostPilot holen