python inspect库
一、介绍
inspect模块用于收集python对象的信息,可以获取类或函数的参数的信息,源码,解析堆栈,对对象进行类型检查等等。
inspect模块主要提供了四种用处:
- 对是否是模块、框架、函数进行类型检查
- 获取源码
- 获取类或者函数的参数信息
- 解析堆栈解析堆栈
二、常用的方法
1、getargspec(func)
返回一个命名元组ArgSpect(args, varargs, keywords, defaults),
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, b, *args, **kwargs): pass argspec = inspect.getargspec(F.f1) print argspec # ArgSpec(args=['self', 'a', 'b'], varargs='args', keywords='kwargs', defaults=None) print argspec.args # ['self', 'a', 'b'] print argspec.varargs # args
2、getsource(object)
返回类或者函数的源码
class F(): def f1(self, a, b, *args, **kwargs): pass print inspect.getsource(F) print inspect.getsource(F.f1)
3、getsourcelines(object)
返回一个元组,元组第一项为对象源代码行的列表,第二项是第一行源代码的行号
class F(): def f1(self, a, b, *args, **kwargs): pass print inspect.getsourcelines(F) # (['class F():\n', ' def f1(self, a, b, *args, **kwargs):\n', ' pass\n'], 3) print inspect.getsourcelines(F.f1) # ([' def f1(self, a, b, *args, **kwargs):\n', ' pass\n'], 4)
4、getmodule(object)
返回定义对象的模块
class F(): def f1(self, a, b, *args, **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()实现的。
predicate是一个可选的函数参数,被此函数判断为True的成员才被返回。
# 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>)]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix