For*_*ner 0 python class definition
我正在经历这个问题:如何在python中返回类的定义?
但是我无法显示类定义.我收到以下错误:
>>> 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
>>>
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我这里做错了什么吗?谢谢.
该inspect.getsource()
函数仅在有可用于加载源代码的文本文件时才有效.
您将类的定义键入到交互式解释器中,在将该源编译为内存中的类和代码对象时,它不会保留原始源.
将您的类定义放入模块,导入模块,然后使用inspect.getsource()
.
inspect.getsource()
通过首先找到给定对象的模块(对于类,通过查看ClassObj.__module__
模块名称的属性,然后获取模块sys.modules[modulename]
)然后查看模块是否具有__file__
可从中确定可读源文件的属性来工作.如果有这样的文件名并且可以读取,那么inspect
模块会读取该文件,然后搜索该class ClassName:
行,并为您提供相同或更深缩进的所有行.交互式解释器执行__main__
模块中的所有内容,并且__file__
解释器没有任何属性,因此任何为此处定义的对象加载源代码的尝试都将失败.
如果您只是想知道类定义的成员,请使用dir()
或help()
替换对象.您无需查看该信息的完整源代码.
归档时间: |
|
查看次数: |
56 次 |
最近记录: |