Interviewfrage für Python-Entwickler

Wann würdest du eine dataclass einem NamedTuple oder einem Pydantic-Modell vorziehen?

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

Kurzantwort

Nimm eine dataclass für interne veränderliche Strukturen, wo du normale Attribute und geschenktes init, repr und eq willst. Nimm ein NamedTuple, wenn du einen unveränderlichen, tupelartigen Record willst, der sich billig entpacken und hashen lässt. Nimm Pydantic an den Systemgrenzen, wo du Laufzeitvalidierung, Coercion und Serialisierung für Daten brauchst, die per HTTP, aus Config-Dateien oder aus Queues ankommen.

Warum Interviewer das fragen

Es gibt vier oder fünf Wege, in modernem Python einen Record zu deklarieren, und der Interviewer will wissen, ob du bewusst wählst, statt zu dem zu greifen, was du zuletzt benutzt hast. Die Schlüsselerkenntnis, auf die sie hören, ist, dass Type Hints auf einer dataclass zur Laufzeit nicht erzwungen werden, dass Validierung also genau das ist, was Pydantic dir kauft, und dass Validierung für jedes interne Objekt zu bezahlen verschwendete Arbeit ist.

So baust du deine Antwort auf

  • Sortier die drei danach, woher die Daten kommen.
  • Sag, dass dataclass-Hints zur Laufzeit nicht erzwungen werden.
  • Gib den Unveränderlichkeits- und Hashing-Aspekt für NamedTuple.
  • Nenn deinen Default und die Regel an der Grenze.

Beispielantwort

Gesprochenes Beispiel, erste Person

Meine Regel ist: Pydantic bewacht die Ränder, dataclasses leben drinnen. Alles, was eine Grenze überquert, ein Request Body, eine Environment-Config, eine Nachricht aus einer Queue, bekommt ein Pydantic-Modell, weil ich es einmal, laut, an der Stelle des Eintreffens validiert und konvertiert haben will. Alles stromabwärts davon kann eine schlichte dataclass mit aktivierten slots sein, denn ich weiß bereits, dass die Daten gut sind, und ich will nicht für jedes Objekt, das ich in einer Schleife konstruiere, Validierungskosten zahlen. Was Leute übersehen: ein dataclass-Feld als int zu annotieren macht zur Laufzeit gar nichts, übergib einen String und er wird fröhlich gespeichert. NamedTuple nutze ich seltener, hauptsächlich für kleine unveränderliche Records, die Dict-Keys sein oder entpackt werden müssen, etwa ein Koordinatenpaar oder ein Cache-Key. In einem Service, an dem ich gearbeitet habe, hat der Wechsel eines internen Hot Paths von Pydantic-Modellen zu geslotteten dataclasses die Laufzeit eines Batch-Jobs spürbar gesenkt, allein weil wir die erneute Validierung bereits geprüfter Daten übersprungen haben.

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 macht slots gleich True auf einer dataclass?
  • Wie machst du eine dataclass unveränderlich?
  • Was hat sich zwischen Pydantic v1 und v2 geändert?

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