有没有办法从实时的Python解释器会话或动态创建的对象中检索源代码?

2024-09-27 20:20:49 发布

您现在位置:Python中文网/ 问答频道 /正文

当一个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()的结果做些什么吗?在


Tags: 模块对象方法self源代码foodef方式

热门问题