百科狗-知识改变命运!
--

python之使用inspect模块

乐乐1年前 (2023-11-21)阅读数 21#技术干货
文章标签方法

inspect模块提供了一系列函数用于帮助使用自省。下面仅列出较常用的一些函数,想获得全部的函数资料可以查看inspect模块的文档。

1.检查对象类型

is{module|class|function|method|builtin}(obj):

检查对象是否为模块、类、函数、方法、内建函数或方法。

isroutine(obj):

用于检查对象是否为函数、方法、内建函数或方法等等可调用类型。用这个方法会比多个is*()更方便,不过它的实现仍然是用了多个is*()。

im=cat.sayHi

ifinspect.isroutine(im):

im()

对于实现了__call__的类实例,这个方法会返回False。如果目的是只要可以直接调用就需要是True的话,不妨使用isinstance(obj,collections.Callable)这种形式。我也不知道为什么Callable会在collections模块中,抱歉!我猜大概是因为collections模块中包含了很多其他的ABC(AbstractBaseClass)的缘故吧:)

2.获取对象信息

getmembers(object[,predicate]):

这个方法是dir()的扩展版,它会将dir()找到的名字对应的属性一并返回,形如[(name,value),...]。另外,predicate是一个方法的引用,如果指定,则应当接受value作为参数并返回一个布尔值,如果为False,相应的属性将不会返回。使用is*作为第二个参数可以过滤出指定类型的属性。

getmodule(object):

还在为第2节中的__module__属性只返回字符串而遗憾吗?这个方法一定可以满足你,它返回object的定义所在的模块对象。

get{file|sourcefile}(object):

获取object的定义所在的模块的文件名|源代码文件名(如果没有则返回None)。用于内建的对象(内建模块、类、函数、方法)上时会抛出TypeError异常。

get{source|sourcelines}(object):

获取object的定义的源代码,以字符串|字符串列表返回。代码无法访问时会抛出IOError异常。只能用于module/class/function/method/code/frame/traceack对象。

getargspec(func):

仅用于方法,获取方法声明的参数,返回元组,分别是(普通参数名的列表,*参数名,**参数名,默认值元组)。如果没有值,将是空列表和3个None。如果是2.6以上版本,将返回一个命名元组(NamedTuple),即除了索引外还可以使用属性名访问元组中的元素。

defadd(x,y=1,*z):

returnx+y+sum(z)

printinspect.getargspec(add)

#ArgSpec(args=['x','y'],varargs='z',keywords=None,defaults=(1,))

getargvalues(frame):

仅用于栈帧,获取栈帧中保存的该次函数调用的参数值,返回元组,分别是(普通参数名的列表,*参数名,**参数名,帧的locals())。如果是2.6以上版本,将返回一个命名元组(NamedTuple),即除了索引外还可以使用属性名访问元组中的元素。

defadd(x,y=1,*z):

printinspect.getargvalues(inspect.currentframe())

returnx+y+sum(z)

add(2)

#ArgInfo(args=['x','y'],varargs='z',keywords=None,locals={'y':1,'x':2,'z':()})

getcallargs(func[,*args][,**kwds]):

返回使用args和kwds调用该方法时各参数对应的值的字典。这个方法仅在2.7版本中才有。

getmro(cls):

返回一个类型元组,查找类属性时按照这个元组中的顺序。如果是新式类,与cls.__mro__结果一样。但旧式类没有__mro__这个属性,直接使用这个属性会报异常,所以这个方法还是有它的价值的。

printinspect.getmro(Cat)

#(,)

printCat.__mro__

#(,)

classDog:pass

printinspect.getmro(Dog)

#(,)

python之使用inspect模块

printDog.__mro__#AttributeError

currentframe():

返回当前的栈帧对象。

以上内容为大家介绍了python之使用inspect模块,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:开发教育。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)