Python inspect 库
inspect
未摘录完,详见 https://zhuanlan.zhihu.com/p/290018252
inspect 是用来获取对象的信息,对象包括模块 (往往是一个 py 文件)、类、方法、函数、报错追踪、帧对象和代码对象。
例如,它能用来帮助你检验类的内容,检索一个方法的源代码,提取并格式化函数的参数列表,或者获取用来展示一个 traceback 的所有信息。
用法
inspect.getmembers(object[,predicate])
返回由 object 的成员的 (name,value)
构成的列表,并且根据 name 进行排序。如果可选参数 predicate 是一个判断条件,只有 value 满足 predicate 条件的成员才会被返回。
|
|
返回 Person 类的所有成员:
|
|
运行结果为:
|
|
返回 person 实例的所有成员:
|
|
运行结果为:
|
|
现在我们考虑 predicate 这个参数。根据官方文档的意思,我们可以写一个函数,如果成员的值能够让该函数返回 True,则 getmembers 可以返回该成员,否则则不返回。
还是上面的例子,如果我们想返回值为字符串的成员,则可以写如下的代码:
|
|
运行结果为:
|
|
inspect.getmodulename(path)
通过输入一个路径返回模块名称。在 Python 中,一个 py 文件就是一个 module,这需要与包 (package) 相区别,如果输入的 path 是一个 package,则该方法会返回 None。
例如我们返回 D:\Software\Anaconda3\Lib\site-packages\sklearn\cluster\_bicluster.py
的模块名:
|
|
运行结果为:
|
|
此时我们将路径变成 sklearn 文件夹(是 package 而不是 module):
|
|
运行结果为:
|
|
其他
inspect.ismodule(object)
- 如果 object 是一个 module 就返回 True,反之则返回 False。
inspect.isclass(object)
- 如果 object 是一个 class 就返回 True,反之则返回 False。
inspect.ismethod(object)
- 如果 object 是一个方法则返回 True,反之则返回 False。
此外还有一系列的 is 开头的方法,包括:isfunction, isgeneratorfunction, isgenerator, iscoroutinefunction, iscoroutine, isawaitable, isasyncgenfunction, isasyncgen, istraceback 等。
除了 is 开头的一系列方法外,还有一系列 get 开头的方法,这里不再赘述,可自行查询官方文档。我们将关注点转向 inspect 的其他对象,包括:
- Signatrure object
- Parameter
- BoundArguments