ライブ インタープリター セッションで、pickled オブジェクトをアンマーシャリングするか、その他の方法で Python オブジェクトが動的に作成された場合、inspect
モジュールを使用してそのソース コードを取得することはできなくなります (inspect
ソースがディスク上のいくつかのファイルからコンパイルされます)。
次のような単純なクラスがある場合:
>>> class Foo(object):
... def __init__(self):
... self.a = 100
... def bar(self):
... print 'hello'
...
>>> f = Foo()
>>>
Foo
クラスまたはf
オブジェクトのソースコードを取得する簡単な方法はありますか?
この問題の少なくとも一部を回避する方法がいくつかあることは承知しています。たとえば、 を使用inspect.getmembers
して のすべてのメンバーを検索したりf
、メンバーを反復処理して callable と非 callable を検索したり、 を使用inspect.getargspec
してメソッド シグネチャを決定したりできます。これらすべてから、ソース コードの少なくとも一部を再生成できますが、各メソッド内のコード。各メソッドのバイトコード バージョンはモジュールによって生成できますdis
が、それでもソース コードに逆コンパイルする必要があります。
私が見逃したこれを行うためのより良い方法はありますか? の結果で何かできることはありsys._getframe()
ますか?