Dunder-Methoden sind die speziellen Methoden mit doppelten Unterstrichen, an die Python-Syntax dispatcht. len auf einem Objekt ruft dunder len auf, der Plus-Operator ruft dunder add auf, und eine for-Schleife ruft dunder iter auf. Sie zu implementieren lässt deine Klasse sich wie ein Built-in-Typ verhalten, sodass die Sprachprotokolle auf deinen Objekten funktionieren, statt dass du eigene Methodennamen erfindest.
Warum Interviewer das fragen
Das unterscheidet Leute, die Python schreiben, von Leuten, die eine andere Sprache in Python-Syntax schreiben. Der Interviewer will die Protokoll-Idee hören: dass Duck Typing in CPython über diese Hooks implementiert ist und dass der richtige Instinkt ist, das Protokoll zu implementieren statt eine Methode namens to_string anzuschrauben. Zu wissen, welchen Dunder man wählt, etwa repr gegen str, signalisiert Alltagsroutine.
So baust du deine Antwort auf
- Definiere sie als Hooks, die die Syntax aufruft.
- Gib zwei oder drei konkrete Zuordnungen.
- Erklär die Protokoll-Idee dahinter.
- Nenn die, die du am häufigsten implementierst.
Beispielantwort
Das sind die Hooks, die der Interpreter aufruft, wenn du Syntax benutzt. Zugriff mit eckigen Klammern geht an dunder getitem, das Schlüsselwort in geht an dunder contains, Gleichheit geht an dunder eq und so weiter. Der Punkt ist, dass Python Verhalten als Protokolle definiert statt als Interfaces, die du erbst, also ist mein Objekt ein Iterator, sobald es dunder iter und dunder next implementiert, Punkt, keine Basisklasse nötig. In der Praxis implementiere ich am häufigsten repr, eq und hash. Vor allem repr, denn ein gutes repr, das die identifizierenden Felder zeigt, macht aus einer nutzlosen Debugging-Session eine Fünf-Minuten-Sache, während die Default-Ausgabe object at 0x7f dir gar nichts sagt. Bei eq und hash bin ich vorsichtig, denn eq ohne hash zu definieren macht Instanzen unhashbar und sie hören still auf, als Dict-Keys zu funktionieren. In einem Domänenmodell, das ich gebaut habe, konnten wir durch dunder lt Datensätze mit dem eingebauten sorted sortieren, statt überall eine key-Funktion durchzureichen.
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 esNachfragen, mit denen du rechnen solltest
- Was ist der Unterschied zwischen repr und str?
- Warum müssen eq und hash zusammenpassen?
- Wie unterscheidet sich dunder getattr von getattribute?
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