Python:获取类的源代码(使用inspect)

Ale*_*far 5 python class ipython linecache

我正在使用ipython,我想保存一个在笔记本中定义的类。我可以使用%save和inspect.getsource函数很好地做到这一点,但是我似乎无法获取类的源代码。我快速浏览了一下inspect中的方法,似乎找不到任何可以帮助的方法。有什么建议么?

class A():
    def __init__(self):
        self.x = 1

%save filename.py inspect.getsource(A)

inspect.getsource(A)
>>> ...
>>> TypeError: <module '__main__'> is a built-in class
Run Code Online (Sandbox Code Playgroud)

Tho*_*zco 5

getsource通过实际打开定义您正在查看的对象的源文件来工作。

但是,由于您A在交互式解释器中进行了定义,因此不存在这样的源文件,因此 Python 无法找到该源文件。

这个错误有点晦涩难懂,但Python基本上尝试查找A的模块( A.__module__)的源文件,它是__main__,并且它没有__file__属性(因为它不是来自文件)。

  • 脚注:它确实适用于函数定义(尝试“inspect.getsource(A.__init__)”),因为函数有一个代码对象,它引用定义函数的文件。IPython 与 linecache 模块一起记录每个为此目的(以及回溯)作为“文件”输入。但类不存储代码对象,因此它必须引用模块,并且“__main__”模块被分成单独的块。 (3认同)