当一个Python对象在实时解释器会话中、通过取消对pickled对象的编组或其他方式动态创建时,inspect
模块将不再用于检索其源代码(因为inspect
依赖于源代码是从磁盘上的某个文件编译的)。在
如果我有这样一个简单的类:
>>> class Foo(object):
... def __init__(self):
... self.a = 100
... def bar(self):
... print 'hello'
...
>>> f = Foo()
>>>
有没有一些直接的方法来获取Foo
类或f
对象的源代码?在
我知道至少有一些方法可以解决这个问题。例如,可以使用inspect.getmembers
来查找f
的所有成员,遍历成员以查找可调用和不可调用,使用inspect.getargspec
来确定方法签名,等等。从这些方法中,至少可以重新生成一些源代码,但不能重新生成每个方法中的代码。dis
模块可以生成每个方法的字节码版本,但仍需要将其反编译为源代码。在
我还有更好的办法吗?能用sys._getframe()
的结果做些什么吗?在
您无法获得源代码,但可以获得字节码,并且可以使用stdlib^{} 模块对其进行反汇编。字节码通常很容易被有一点经验的人读懂。在
相关问题 更多 >
编程相关推荐