Aufrufbares Objekt aus dem Frame holen
Gegeben das Rahmenobjekt (wie zurückgegeben vonsys._getframekann ich das zugrunde liegende aufrufbare Objekt abrufen?
Code Erklärung:
def foo():
frame = sys._getframe()
x = some_magic(frame)
# x is foo, now
Beachten Sie, dass mein Problem darin besteht, das Objekt aus einem Frame zu entfernen, nicht das aktuell aufgerufene Objekt.
Hoffe das ist möglich.
Prost,
MH
BEARBEITEN:
Ich habe es irgendwie geschafft, dieses Problem zu umgehen. Es war stark von den Antworten von Andreas und Alexander inspiriert. Vielen Dank für die investierte Zeit!
def magic():
fr = sys._getframe(1)
for o in gc.get_objects():
if inspect.isfunction(o) and o.func_code is fr.f_code:
return o
class Foo(object):
def bar(self):
return magic()
x = Foo().bar()
assert x is Foo.bar.im_func
(funktioniert in 2.6.2, für py3k ersetzenfunc_code
mit__code__
undim_func
mit__func__
)
Dann kann ich aggressiv durch Globals () oder gc.get_objects () und dir () nach dem aufrufbaren Objekt mit der angegebenen Funktion suchen.
Fühlt sich für mich etwas unpythonisch an, funktioniert aber.
Danke noch einmal!
MH