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

Antworten auf die Frage(3)

Ihre Antwort auf die Frage