Python関数にはコードオブジェクトがあります__code__
。
sys.settrace
トレースにframe
はf_code
コードオブジェクトがあります。
関数であるトレーサーへの呼び出しの場合、関数オブジェクト(およびその__annotation__
メンバー)を取得するにはどうすればよいですか?
これまでのところ、試行錯誤によって、私は次のことを行っています。
if hasattr(frame.f_globals.get(frame.f_code.co_name),"__annotations__"):
これは関数では機能するようですが、クラスメンバー関数では機能しません。さらに悪いことに、クラスメンバー関数を同じ名前のトップレベル関数と混同します。
(私はPython 3.2.3(Xubuntu)を使用しています。Python3.3inspect
モジュールにsignature
関数があることがわかります。これにより、コードオブジェクトの注釈が返されますか、それとも関数オブジェクトが必要ですか?)