Eine Python-Funktion hat ein Codeobjekt __code__
.Abrufen der Python-Funktion für ein Codeobjekt
Ein sys.settrace
Trace frame
hat ein f_code
Code-Objekt.
Für diejenigen Aufrufe an den Tracer, die Funktionen sind, wie bekomme ich das Funktionsobjekt (und seine __annotation__
Mitglied)?
Bisher durch Versuch und Irrtum, ich habe:
if hasattr(frame.f_globals.get(frame.f_code.co_name),"__annotations__"):
Dies scheint für Funktionen zu arbeiten, aber nicht für Klasse-Member-Funktionen; Schlimmer noch, es verwechselt Klassen-Member-Funktionen mit gleichnamigen Top-Level-Funktionen.
(. Ich bin auf Python 3.2.3 (Xubuntu) Ich sehe, dass Python 3.3 inspect
Module eine signature
Funktion hat, wird dies die Anmerkung für ein Code-Objekt zurück oder ist es auch ein Funktionsobjekt brauchen?)
der 'inspect.getframeinfo' Tupel' function' Feld scheint ersetzen sollte ein String zu sein, anstatt ein Funktionsobjekt. Und der GC-Ansatz riskiert mehrere Referrer? – Will
Ich bin gelandet mit gc.get_referrers (...) [0] – Will
Sie können eine Überprüfung hinzufügen, um zu sehen, ob func_code/__ code__ das Code-Objekt ist, das Sie in die Liste Verständnis. Dies schlägt immer noch fehl, wenn Sie mehrere Funktionen mit generieren unterschiedliche Schließungen vom selben Code-Objekt, z mit einem Dekorateur. Ich nehme an, man könnte die f_locals gegen die cell_contents der func_closure für jeden vergleichen ... –