Получение вызываемого объекта из кадра

Учитывая объект кадра (как возвращеноsys._getframeнапример, можно ли получить базовый вызываемый объект?

Объяснение кода:

def foo():
    frame = sys._getframe()
    x = some_magic(frame)

    # x is foo, now

Обратите внимание, что моя проблема - получить объект из фрейма, а не вызываемый в данный момент объект.

Надеюсь, что это возможно.

Ура,

MH

EDIT:

Мне удалось обойти эту проблему. Он был сильно вдохновлен Андреасом & apos; и ответы Александра. Спасибо, ребята, за потраченное время!

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

(работает в 2.6.2, для py3k заменитьfunc_code с__code__ а такжеim_func с__func__)

Затем я могу агрессивно перебирать globals () или gc.get_objects () и dir () все в поисках вызываемого объекта с заданным функциональным объектом.

Мне немного не по себе, но это работает.

Еще раз спасибо!

MH

Ответы на вопрос(3)

Ваш ответ на вопрос