python inspect库
发布时间:2020-12-20 10:14:26 所属栏目:Python 来源:网络整理
导读:一、介绍 inspect模块用于收集python对象的信息,可以获取类或函数的参数的信息,源码,解析堆栈,对对象进行类型检查等等。 inspect模块主要提供了四种用处: 对是否是模块、框架、函数进行类型检查 获取源码 获取类或者函数的参数信息 解析堆栈解析堆栈 ?
一、介绍inspect模块用于收集python对象的信息,可以获取类或函数的参数的信息,源码,解析堆栈,对对象进行类型检查等等。 inspect模块主要提供了四种用处:
? 二、常用的方法1、getargspec(func)返回一个命名元组ArgSpect(args,varargs,keywords,defaults), # 函数 def f1(a,b,*args,**kwargs): pass argspec = inspect.getargspec(f1) print argspec # ArgSpec(args=[‘a‘,‘b‘],varargs=‘args‘,keywords=‘kwargs‘,defaults=None) print argspec.args # [‘a‘,‘b‘] print argspec.varargs # args # 类方法 class F(): def f1(self,a,**kwargs): pass argspec = inspect.getargspec(F.f1) print argspec # ArgSpec(args=[‘self‘,‘a‘,defaults=None) print argspec.args # [‘self‘,‘b‘] print argspec.varargs # args ? 2、getsource(object)返回类或者函数的源码 class F(): def f1(self,**kwargs): pass print inspect.getsource(F) print inspect.getsource(F.f1) ? 3、getsourcelines(object)返回一个元组,元组第一项为对象源代码行的列表,第二项是第一行源代码的行号 class F(): def f1(self,**kwargs): pass print inspect.getsourcelines(F) # ([‘class F():n‘,‘ def f1(self,**kwargs):n‘,‘ passn‘],3) print inspect.getsourcelines(F.f1) # ([‘ def f1(self,4) ? 4、getmodule(object)返回定义对象的模块 class F(): def f1(self,**kwargs): pass print inspect.getmodule(F) # <module ‘__main__‘ from ‘D:/Projects/test.py‘> print inspect.getmodule(F.f1) # <module ‘__main__‘ from ‘D:/Projects/test.py‘> ? 5、ismodule,isclass,ismethod,isfunction,isbuiltin一系列判断对象类型的方法,大都是包装了isinstance(object,types.FunctionType)之类语句的函数。 ? 6.getmembers(object[,predicate])返回一个包含对象的所有成员的(name,value)列表。返回的内容比对象的__dict__包含的内容多,源码是通过dir()实现的。 # getmembers的源码 def getmembers(object,predicate=None): """Return all members of an object as (name,value) pairs sorted by name. Optionally,only return members that satisfy a given predicate.""" results = [] for key in dir(object): try: value = getattr(object,key) except AttributeError: continue if not predicate or predicate(value): results.append((key,value)) results.sort() return results # 示例 class Foo(object): def __init__(self,name): self.__name = name def getname(self): return self.__name print inspect.getmembers(Foo,inspect.ismethod) 结果: [(‘__init__‘,<unbound method Foo.__init__>),(‘getname‘,<unbound method Foo.getname>)] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |