如何在 Python 中显示 class 的定义

How to display definition of a class in Python

我正在回答这个问题:How do I return the definition of a class in python?

但我无法显示 class 定义。我收到以下错误:

>>> class A:
...     pass
...
>>> import inspect
>>> source_text = inspect.getsource(A)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\**\Python\Python36\lib\inspect.py", line 968, in getsource
    lines, lnum = getsourcelines(object)
  File "C:\Users\**\Python\Python36\lib\inspect.py", line 955, in getsourcelines
    lines, lnum = findsource(object)
  File "C:\Users\**\Python\Python36\lib\inspect.py", line 768, in findsource
    file = getsourcefile(object)
  File "C:\Users\**\Python\Python36\lib\inspect.py", line 684, in getsourcefile
    filename = getfile(object)
  File "C:\Users\**\Python\Python36\lib\inspect.py", line 654, in getfile
    raise TypeError('{!r} is a built-in class'.format(object))
TypeError: <module '__main__' (<_frozen_importlib_external.SourceFileLoader object at 0x0000026A79293F60>)> is a built-in class
>>>

有人可以告诉我我做错了什么吗?谢谢

inspect.getsource() 功能只有在有 文本文件可用于加载源代码时才有效

您在交互式解释器中输入了 class 的定义,在将该源代码编译到内存中 class 和代码对象时,它不会保留原始源代码。

将您的 class 定义放入模块,导入模块,然后 然后 使用 inspect.getsource()

inspect.getsource() 首先找到给定对象的模块(对于 classes,通过查看模块名称的 ClassObj.__module__ 属性,然后通过 sys.modules[modulename]) 然后查看模块是否具有 __file__ 属性,可以从中确定可读源文件。如果有这样的文件名并且可以读取,那么 inspect 模块会读取该文件,然后搜索 class ClassName: 行,并为您提供从该点开始的所有行,缩进相同或更深。交互式解释器执行 __main__ 模块中的所有内容,并且解释器没有 __file__ 属性,因此任何为那里定义的对象加载源代码的尝试都会失败。

如果您只想知道 class 定义了哪些成员,请改用对象上的 dir() or help()。您不需要查看该信息的完整源代码。