Python Inspect模块
inspect:
1.对类,模块的操作,成员,类,模块类型的判断
2.获取源码
3.获取类或函数的参数信息
4.解析堆栈
function
inspect.signature(obj, *, follow_wrapped=True)
return signature类型的对象,值为函数的所有参数
inspect.signature(fun).parameters
return orderdict key就是参数名 str类型
inspect.getmembers(module)
return module的所有成员的name和obj类型
inspect.isclass(obj)
return boolean判断一个对象是否是类
示例代码:
import inspect
def a(a, b=0, *c, d, e=1, **f):
aa = inspect.signature(a)
print("inspect.signature(fn)是{0}".format(aa))
print("inspect.signature(fn)的类型是{0}".format(type(aa)))
bb = aa.parameters
print("signature.parameters属性是{0}".format(bb))
print("signature.parameters属性的类型是{0}".format(type(bb)))
for cc, dd in bb.items():
print("mappingproxy.items()返回的值分别是{0},{1}".format(cc, dd))
print("mappingproxy.items()返回的值类型分别是{0},{1}".format(type(cc), type(dd)))
ee = dd.kind
print("parameter.kind属性是{0}".format(ee))
print("parameter.kind属性类型是{0}".format(type(ee)))
gg = dd.default
print("parameter.default属性是{0}".format(gg))
print("parameter.default属性类型是{0}".format(type(gg)))
ff = inspect.Parameter.KEYWORD_ONLY
print("inspect.Parameter.KEYWORD_ONLY属性是{0}".format(ff))
print("inspect.Parameter.KEYWORD_ONLY属性类型是{0}".format(type(ff)))
示例代码:
import inspect
for name, obj in inspect.getmembers(unittest):
"""获取该模块的所有类"""
if inspect.isclass(obj):
print(obj.__name__)
获取某个类中的函数:
for i in inspect.getmembers(Page): #获取Page类中的所有成员方法,i返回的是一个元祖,第一个元素是方法名,第二个是内存地址
if inspect.isfunction(i[1]): #判断成员是不是一个函数方法
print(i[1].__doc__) #是打印他的doc
"""下面可以写出带序号的方法"""
driver = []