Получение вызываемого объекта из кадра
Учитывая объект кадра (как возвращено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