Du fügst eine dritte Ebene hinzu. Die äußere Funktion nimmt die Decorator-Argumente und gibt den eigentlichen Decorator zurück, der die Funktion nimmt und einen Wrapper zurückgibt, der sie aufruft. Setz functools.wraps auf den Wrapper, damit Name, Docstring und Signatur-Metadaten überleben. Ein Retry-Decorator zum Beispiel nimmt die Anzahl der Versuche auf der äußeren Ebene, und der Wrapper implementiert die Schleife.
Warum Interviewer das fragen
Decorators testen, ob du dich damit wohlfühlst, Funktionen als Werte zu behandeln und Zustand einzuschließen. Die parametrisierte Variante erhöht die Schwierigkeit, weil du drei Ebenen sauber halten musst, während du laut erklärst. Interviewer hören außerdem auf functools.wraps, denn wer es vergisst, zerschießt Introspection, Hilfe-Ausgaben und alles, was am Funktionsnamen hängt, was in Frameworks, die Routes oder Tasks registrieren, ein echtes Problem ist.
So baust du deine Antwort auf
- Beschreib die drei verschachtelten Ebenen der Reihe nach.
- Sag, was jede Ebene bekommt und zurückgibt.
- Erwähn functools.wraps und warum es zählt.
- Verankere es in einem Decorator, den du wirklich geschrieben hast.
Beispielantwort
Drei Ebenen, und ich sage sie laut der Reihe nach auf, damit ich den Faden nicht verliere. Die äußerste Funktion nimmt die Konfiguration, sagen wir die Anzahl der Retries. Sie gibt den Decorator zurück, der die Zielfunktion nimmt. Der gibt den Wrapper zurück, der star args und star star kwargs nimmt, die Arbeit um den Aufruf herum macht und das Ergebnis zurückgibt. Ich setze immer functools.wraps auf den Wrapper, sonst meldet sich die dekorierte Funktion überall als wrapper, und Flask oder Celery registrieren fröhlich zwei Routes unter demselben Namen und scheitern auf verwirrende Weise. Den ich am häufigsten geschrieben habe, ist ein Retry mit exponentiellem Backoff für wacklige Upstream-Aufrufe: drei Versuche, verdoppelnde Wartezeit, beim letzten wird durchgereicht. Eine nützliche Verfeinerung ist, auch die Funktion direkt anzunehmen, damit es mit und ohne Klammern funktioniert, obwohl ich ehrlich gesagt meistens einfach die Klammern verlange, weil die Verzweigungslogik mehr Klarheit kostet als sie bringt.
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
- Wie würdest du diesen Decorator für async-Funktionen tauglich machen?
- Was kopiert functools.wraps eigentlich?
- Wann wäre ein klassenbasierter Decorator besser?
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