一图看懂 inspect 资料整理+笔记(大全)
- 图一
- 图二
- 图三
- 图四
- 图五
- def ismodule(object):
- def isclass(object):
- def ismethod(object):
- def ismethoddescriptor(object):
- def isdatadescriptor(object):
- def isfunction(object):
- def isgeneratorfunction(object):
- def iscoroutinefunction(object):
- def isasyncgenfunction(object):
- def isasyncgen(object):
- def isgenerator(object):
- def iscoroutine(object):
- def isawaitable(object):
- def istraceback(object):
- def isframe(object):
- def iscode(object):
- def isbuiltin(object):
- def isroutine(object):
- def isabstract(object):
- def getmembers(object, predicate=None):
- def classify_class_attrs(cls):
- def getmro(cls):
- def unwrap(func, *, stop=None):
- def indentsize(line):
- def _findclass(func):
- def _finddoc(obj):
- def getdoc(object):
- def cleandoc(doc):
- def getfile(object):
- def getmodulename(path):
- def getsourcefile(object):
- def getabsfile(object, _filename=None):
- def getmodule(object, _filename=None):
- def findsource(object):
- def getcomments(object):
- class EndOfBlock(Exception): pass
- class BlockFinder:
- def getblock(lines):
- def getsourcelines(object):
- def getsource(object):
- def walktree(classes, children, parent):
- def getclasstree(classes, unique=False):
- def getargs(co):
- def _getfullargs(co):
- def getargspec(func):
- def getfullargspec(func):
- def getargvalues(frame):
- def formatannotation(annotation, base_module=None):
- def formatannotationrelativeto(object):
- def formatargspec(...)
- def formatargvalues(...)
- def _missing_arguments(f_name, argnames, pos, values):
- def _too_many(f_name, args, kwonly, varargs, defcount, given, values):
- def getcallargs(*func_and_positional, **named):
- def getclosurevars(func):
- def getframeinfo(frame, context=1):
- def getlineno(frame):
- def getouterframes(frame, context=1):
- def getinnerframes(tb, context=1):
- def currentframe():
- def stack(context=1):
- def trace(context=1):
- def _static_getmro(klass):
- def _check_instance(obj, attr):
- def _check_class(klass, attr):
- def _is_type(obj):
- def _shadowed_dict(klass):
- def getattr_static(obj, attr, default=_sentinel):
- def getgeneratorstate(generator):
- def getgeneratorlocals(generator):
- def getcoroutinestate(coroutine):
- def getcoroutinelocals(coroutine):
- def _signature_get_user_defined_method(cls, method_name):
- def _signature_get_partial(wrapped_sig, partial, extra_args=()):
- def _signature_bound_method(sig):
- def _signature_is_builtin(obj):
- def _signature_is_functionlike(obj):
- def _signature_get_bound_param(spec):
- def _signature_strip_non_python_syntax(signature):
- def _signature_fromstr(cls, obj, s, skip_bound_arg=True):
- def _signature_from_builtin(cls, func, skip_bound_arg=True):
- def _signature_from_function(cls, func):
- def _signature_from_callable(obj, *,
- class _void:
- class _empty:
- class _ParameterKind(enum.IntEnum):
- class Parameter:
-
- def __init__(self, name, kind, *, default=_empty, annotation=_empty):
- def __reduce__(self):
- def __setstate__(self, state):
- @property def name(self):
- @property def default(self):
- @property def annotation(self):
- @property def kind(self):
- def replace(self, *, name=_void, kind=_void, annotation=_void, default=_void):
- def __str__(self):
- def __repr__(self):
- def __hash__(self):
- def __eq__(self, other):
- class BoundArguments:
- class Signature:
-
- def __init__(self, parameters=None, *, return_annotation=_empty, __validate_parameters__=True):
- @classmethod def from_function(cls, func):
- @classmethod def from_builtin(cls, func):
- @classmethod def from_callable(cls, obj, *, follow_wrapped=True):
- @property def parameters(self):
- @property def return_annotation(self):
- def replace(self, *, parameters=_void, return_annotation=_void):
- def _hash_basis(self):
- def __hash__(self):
- def __eq__(self, other):
- def _bind(self, args, kwargs, *, partial=False):
- def bind(*args, **kwargs):
- def bind_partial(*args, **kwargs):
- def __reduce__(self):
- def __setstate__(self, state):
- def __repr__(self):
- def __str__(self):
- def signature(obj, *, follow_wrapped=True):
- def _main():
本文由 大侠(AhcaoZhu)原创,转载请声明。
图一
图二
图三
图四
图五
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*是一个可选的回调ÿ