网站首页 > 资源文章 正文
一、inspect-检查对象模块简介
官方文档: https://docs.python.org/zh-cn/3.7/library/inspect.html
inspect 模块提供了一些有用的函数帮助获取对象的信息,例如模块、类、方法、函数、回溯、帧对象以及代码对象。例如它可以帮助你检查类的内容,获取某个方法的源代码,取得并格式化某个函数的参数列表,或者获取你需要显示的回溯的详细信息。
该模块提供了4种主要的功能:
- 类型检查
- 获取源代码
- 检查类与函数
- 检查解释器的调用堆栈。
二、用法示例
1.获取源码
import inspect
def add(x, y):
"""加法器"""
return x + y
# 获取源码
print(inspect.getsource(add))
# 打印结果如下:
已连接到 pydev 调试器(内部版本号 233.13135.95)
def add(x, y):
return x + y
# 获取源码文件路径
print(inspect.getsourcefile(add))
# 打印结果如下:
/Users/xxx/git_project/auto_test_project/api_test/demo/demo_inspect.py
2.获取函数的文档字符串、参数
# 获取函数的文档字符串
print(inspect.getdoc(add))
# 打印结果如下:
加法器
# 获取函数参数
print(inspect.signature(add).parameters)
# 打印结果如下:
OrderedDict([('x', <Parameter "x">), ('y', <Parameter "y">)])
三、类和成员
getmembers() 函数获取对象的成员,例如类或模块。函数名以"is"开始的函数主要作为 getmembers() 的第2个参数使用。它们也可用于判定某对象是否有如下的特殊属性:
类型 | 属性 | 描述 |
module 模块 | __doc__ | 文档字符串 |
__file__ | 文件名(内置模块没有文件名) | |
class -- 类 | __doc__ | 文档字符串 |
__name__ | 类定义时所使用的名称 | |
__qualname__ | qualified name -- 限定名称 | |
__module__ | 该类型被定义时所在的模块的名称 | |
method 方法 | __doc__ | 文档字符串 |
__name__ | 该方法定义时所使用的名称 | |
__qualname__ | qualified name -- 限定名称 | |
__func__ | 实现该方法的函数对象 | |
__self__ | 该方法被绑定的实例,若没有绑定则为 None | |
__module__ | 定义此方法的模块的名称 | |
function -- 函数 | __doc__ | 文档字符串 |
__name__ | 用于定义此函数的名称 | |
__qualname__ | qualified name -- 限定名称 | |
__code__ | 包含已编译函数的代码对象 bytecode | |
__defaults__ | 所有位置或关键字参数的默认值的元组 | |
__kwdefaults__ | mapping of any default values for keyword-only parameters | |
__globals__ | global namespace in which this function was defined | |
__annotations__ | mapping of parameters names to annotations; "return" key is reserved for return annotations. | |
__module__ | name of module in which this function was defined | |
generator -- 生成器 | __name__ | 名称 |
__qualname__ | qualified name -- 限定名称 | |
gi_frame | 框架 | |
gi_running | 生成器在运行吗? | |
gi_code | code | |
gi_yieldfrom | object being iterated by yield from, or None |
1.获取模块所有的类
for name, obj in inspect.getmembers(unittest):
if inspect.isclass(obj):
print(obj.__name__)
# 打印结果如下:
BaseTestSuite
FunctionTestCase
IsolatedAsyncioTestCase
SkipTest
TestCase
TestLoader
TestProgram
2.获取某个类中的函数
class TestClass:
"""测试inspect专用类的文档字符串"""
def __init__(self, name, ag
self.__name = name
self.__age = age
def get_name(self):
return self.__name
def get_age(self):
return self.__age
@classmethod
def introduction(cls):
print("hello,my name is tom")
@staticmethod
def show_self():
print("i love china")
① 获取类方法
# 获取类方法
print(inspect.getmembers(TestClass, inspect.ismethod))
# 打印结果如下:
[('introduction', <bound method TestClass.introduction of <class '__main__.TestClass'>>)]
② 获取类中的实例方法、静态方法
# 获取类中的实例方法、静态方法
print(inspect.getmembers(TestClass, inspect.isfunction))
[('__init__', <function TestClass.__init__ at 0x104f1f3a0>), ('get_age', <function TestClass.get_age at 0x10536a550>), ('get_name', <function TestClass.get_name at 0x10536a4c0>), ('show_self', <function TestClass.show_self at 0x10536a670>)]
③ 判断成员是不是函数方法,是则打印方法名
for i in inspect.getmembers(TestClass):
if inspect.isfunction(i[1]):
print(i[1].__name__)
# 打印结果如下:
__init__
get_age
get_name
show_self
猜你喜欢
- 2024-12-09 蔡司复合式三坐标O-INSPECT校准Dotscan时报错怎么办
- 2024-12-09 建立Motion Studio专案
- 2024-12-09 康耐视visionpro9.8-BeadInspect工具详细使用流程
- 2024-12-09 DeepInspect:深度神经网络的黑盒木马检测与缓解框架
- 2024-12-09 GOM Inspect 免费3D量测与检测软件简介
- 2024-12-09 喜讯|温泽exaCT U荣获2018年inspect大奖
- 2024-12-09 PowerInspect2016——非常好用的3D检测类软件
- 2024-12-09 python自动化工具:pywinauto
- 2024-12-09 MAS控制器教程连接視覺軟件Inspect Express
- 2024-12-09 python反射之inspect模块
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)