当 Python 对象被动态创建时,无论是在实时解释器会话中,通过解组腌制对象或其他方式,该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()
什么吗?