Obtenção de objeto de chamada do quadro
Dado o objeto frame (como retornado porsys._getframe, por exemplo), posso obter o objeto de chamada subjacente?
Explicação de código:
def foo():
frame = sys._getframe()
x = some_magic(frame)
# x is foo, now
Observe que meu problema é tirar o objeto de um quadro, não do objeto atualmente chamado.
Espero que seja possível.
Felicidades,
MH
EDITAR:
De alguma forma, consegui contornar esse problema. Foi fortemente inspirado pelas respostas de Andreas e Alexander. Obrigado pessoal pelo tempo investido!
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
(funciona em 2.6.2, para py3k substituafunc_code
com__code__
eim_func
com__func__
)
Então, eu posso percorrer agressivamente globals () ou gc.get_objects () e dir () tudo em busca do callable com o objeto de função fornecido.
Parece um pouco não-patético para mim, mas funciona.
Obrigado novamente!
MH