フレームオブジェクト(たとえば、sys._getframeによって返される)を指定すると、呼び出し可能なオブジェクトを取得できますか?フレームから呼び出し可能なオブジェクトを取得する
コードの説明:私の問題は、フレームではなく、現在と呼ばれるオブジェクトのうち、オブジェクトを取得している
def foo():
frame = sys._getframe()
x = some_magic(frame)
# x is foo, now
注意。
希望は可能です。
乾杯、
MH
EDIT:
私は多少この問題を回避するために管理してきました。それはAndreasとAlexanderの返答に大きく影響されました。時間を投資してくれてありがとう!
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
その後
、私は積極的にグローバル()またはgc.get_objects()とdirをたどることができます()すべてで(__func__
と__code__
とim_func
とfunc_code
を置き換えるpy3kため、2.6.2で動作します)指定された関数オブジェクトで呼び出し可能なものを検索します。
私には少し気分が悪いですが、機能します。
ありがとう、もう一度!
MH
以下の回答から分かるように、それは可能ですが、それは決してお勧めできません。達成したいことは何ですか?他の方法で行うこともできます。 – Blixt
実際に私がやろうとしているのは、プログラム内のすべての関数呼び出しをログに記録することです(後で関数と呼ばれるものを処理します)。これは、bdbモジュールを使ってすべてのスタックフレームをトレースしています。どのようなアイデアにも深く感謝しています! –
プロセスによって、あなたはそれらに電話したい、あるいはあなたが何か他のことをしたいのですか? – Blixt