3

ライブ インタープリター セッションで、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()ますか?

4

1 に答える 1

2

ソースコードは入手できませんが、バイトコードは入手でき、それは stdlibdisモジュールで逆アセンブルできます。バイトコードは、通常、経験の浅い人でも簡単に読み取ることができます。

于 2012-07-16T01:14:30.103 に答える