一图看懂 inspect 资料整理+笔记(大全)

本文深入探讨Python的inspect模块,包含ismodule、isclass、ismethod等函数,以及Signature、BoundArguments等类的使用,旨在帮助开发者更好地理解和操作Python代码。
摘要由CSDN通过智能技术生成

一图看懂 inspect 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。
Alt

图一

inspect00

图二

inspect01

图三

inspect02

图四

inspect03

图五

inspect04
Module:inspect
File:~\Lib\inspect.py

从活动的Python对象中获取有用的信息。这个模块以更友好的方式封装了由内部特殊属性(co_*, im_*, tb_*, 等)提供的接口。
它还为检查源代码和类布局提供了一些帮助。
    下面是这个模块提供的一些有用的函数:
    ismodule(), isclass(), ismethod(), isfunction(), isgeneratorfunction(),
    isgenerator(), istraceback(), isframe(), iscode(), isbuiltin(),
    isroutine() - 检查对象类型
    getmembers() - 获取满足给定条件的对象的成员

    getfile(), getsourcefile(), getsource() - 查找对象的源代码
    getdoc(), getcomments() - 获得对象的文档
    getmodule() - 判断对象从哪个模块来
    getclasstree() - 排列类以表示它们的层次结构

    getargvalues(), getcallargs() - 获取关于函数参数的信息
    getfullargspec() - 获取关于函数参数的信息。带 Python 3 特性支持。
    formatargvalues() - 格式化参数规格
    getouterframes(), getinnerframes() - 获取堆栈帧信息
    currentframe() - 获取当前堆栈帧
    stack(), trace() - 在堆栈或回溯中获取有关帧的信息

    signature() - 为可调用对象获取Signature对象

def ismodule(object):

如果对象是模块,则返回true。
     __cached__ 字节编译文件的路径
     __doc__ 文档字符串
     __file__ 文件名 (对内置模块 built-in 而言,缺失 )
     模块对象提供以下属性:缓存路径名到字节编译文件doc文件(内置模块缺失)

def isclass(object):

如果对象是类,则返回true。类对象提供这些属性:
     __doc__ 文档字符串
     __module__ 定义该类的模块名称

def ismethod(object):

如果对象是实例方法,则返回true。实例方法对象提供以下属性:
     __doc__ documentation string
     __name__ name with which this method was defined
     __func__ function object containing implementation of method
     __self__ instance to which this method is bound

def ismethoddescriptor(object):

    如果对象是方法描述符,则返回true。但如果ismethod()或isclass()或isfunction()为真则不是。
    这是Python 2.2中的新功能,例如,int.__add__ 为 true。
    通过此测试的对象具有__get__属性而不是__set__属性,但除此之外,属性集合有所不同。
    __name__总是可获得,而__doc__有时可获得。
    通过描述符实现的方法,从ismethoddescriptor()测试返回false,但也可能通过其他测试之一,仅仅是因为其他测试承诺更多
    ——例如,当对象通过ismethod()时,您可以指望拥有__func__属性(等等)。

def isdatadescriptor(object):

    如果对象是数据描述符,则返回true。数据描述符同时具有__get__和__set__属性。
    例如属性properties(在Python中定义)、getsets和成员members(在C中定义)。
    通常,数据描述符还将具有__name__和__doc__属性(properties, getsets, members都具有这些属性),但这并不保证。

def ismemberdescriptor(object):

    如果对象是成员描述符,则返回true。成员描述符是在扩展模块中定义的专用描述符。

def isgetsetdescriptor(object):

如果对象是getset描述符,则返回true。Getset描述符是在扩展模块中定义的专用描述符。

def isfunction(object):

如果对象是用户定义的函数,则返回true。函数对象提供这些属性:
    __doc__文档字符串
    __name__定义此函数的名称
    __code__包含已编译函数的代码对象bytecode
    __defaults__参数的任何默认值的元组
    __globals__定义此函数的全局命名空间
    __annotations__参数注释
    __kwdefaults__只包含具有默认值的关键字参数的字典

def isgeneratorfunction(object):

    如果对象是用户定义的生成器函数,则返回true。生成器函数对象提供与函数相同的属性。有关属性列表,请参阅help(isfunction)。

def iscoroutinefunction(object):

    如果对象是协程函数,则返回true。协程函数用“async def”语法定义。

def isasyncgenfunction(object):

    如果对象是异步生成器函数,则返回true。异步生成器函数用“async def”语法定义,并且在函数体中有“yield”表达式。

def isasyncgen(object):

    如果对象是异步生成器,则返回true。

def isgenerator(object):

    如果对象是生成器,则返回true。生成器对象提供以下属性:
        __iter__        定义为支持容器迭代
        close           在生成器内部,引发 GeneratorExit 异常,以终止迭代
        gi_code         代码对象
        gi_frame        帧对象,如果生成器资源耗竭,则可能为None。
        gi_running      当生成器执行时,设置为1,否则为0
        next            返回容器中的下一项
        send            恢复生成器并“发送”一个值,代表当前yield表达式的结果
        throw           用于在生成器内部引发异常

def iscoroutine(object):

    如果对象是协程,则返回true。

def isawaitable(object):

    如果对象可以传递给`await`表达式,则返回true。

def istraceback(object):

    如果对象是回溯对象,则返回true。
        tb_frame        本层的帧对象
        tb_lasti        字节码中最后一次尝试的指令索引
        tb_lineno       Python源代码中的当前行号
        tb_next         下一个内部回溯对象(由该层调用)

def isframe(object):

    如果对象是框架对象,则返回true。帧对象提供这些属性:
        f_back          返回下一个外层帧对象(此帧的调用者)
        f_builtins      此帧看到的内置命名空间 built-in
        f_code          此帧执行的代码对象
        f_globals       此帧看到的全局命名空间global
        f_lasti         字节码中最后一次尝试指令的索引
        f_lineno        Python源代码中的当前行号
        f_locals        此帧看到的本地命名空间local
        f_trace         此帧的跟踪函数,或None

def iscode(object):

如果对象是代码对象,则返回true。代码对象提供这些属性:
    co_argcount         参数个数(不包括*,**参数,或只包含关键字参数)
    co_code             原始编译字节码字符串
    co_cellvars         单元格变量名的元组
    co_consts           字节码中使用的常量的元组
    co_filename         在其中创建此代码对象的文件名
    co_firstlineno      Python源代码中第一行的行号
    co_flags            标志字节位: 1=optimized | 2=newlocals | 4=*arg | 8=**arg
                        | 16=nested | 32=generator | 64=nofree | 128=coroutine
                        | 256=iterable_coroutine | 512=async_generator
    co_freevars         自由变量名的元组
    co_kwonlyargcount   只有关键字参数的数量(不包括** arg)
    co_lnotab           行号到字节码索引的编码映射
    co_name             定义此代码对象的名称
    co_names            局部变量名的元组
    co_nlocals          局部变量个数
    co_stacksize        虚拟机堆栈空间大小
    co_varnames         参数名和局部变量名的元组

def isbuiltin(object):

    如果对象是内置函数或方法,则返回true。内置函数和方法提供这些属性:
        __doc__     文档字符串。
        __name__    此函数或方法的原始名称
        __self__    方法绑定的实例的名称,或者 None。

def isroutine(object):

    如果对象是任何类型的函数或方法,则返回true。

def isabstract(object):

    如果对象是抽象基类(ABC),则返回true。

def getmembers(object, predicate=None):

    返回对象的所有成员,作为按名称排序的(name, value)对。
    可选地,只返回满足给定谓词 predicate 的成员。
    e.g: getmembers(inspect, isclass)

def classify_class_attrs(cls):

    返回属性描述符元组列表。
    对于dir(cls)中的每个名称,返回列表包含一个包含以下元素的4元组:
        0.      名称(字符串)。
        1.      属性是这样的字符串:
                'class method'      通过classmethod()创建
                'static method'     通过staticmethod()创建的“静态方法”
                'property'          通过property()创建的属性
                'method'            任何其他类型的方法或描述符
                'data'              不是方法
        2.      定义此属性的类(类)。
        3.      调用getattr获得的对象;如果失败,或者产生的对象不在类的mro(包括元类)中,则在定义类的dict中查找该对象(通过遍历mro找到)。
    如果dir(cls)中的一个项存储在元类中,它现在将被发现,并且没有将None列为定义它的类。无法发现其主类的任何项都将被跳过。

def getmro(cls):

    按方法解析顺序返回基类(包括cls)的元组。

def unwrap(func, *, stop=None):

    使用*func*获取对象包装。
    跟随attr:`__wrapped__`属性的链,返回链中的最后一个对象。
    *stop*是一个可选的回调ÿ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AhcaoZhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值