pyclbr — Python 模块浏览器支持

源代码: Lib/pyclbr.py


pyclbr 模块提供关于 Python 编码模块中定义的函数、类和方法的有限信息。这些信息足以实现一个模块浏览器。信息是从 Python 源代码中提取的,而不是通过导入模块,因此该模块可以安全地用于不可信代码。此限制使得此模块无法用于未用 Python 实现的模块,包括所有标准和可选的扩展模块。

pyclbr.readmodule(module, path=None)

返回一个字典,将模块级类名映射到类描述符。如果可能,将包含导入的基类的描述符。参数 module 是一个字符串,包含要读取的模块名称;它可能是包内的模块名称。如果给定,path 是一个目录路径序列,它会添加到 sys.path 的前面,用于定位模块源代码。

此函数是原始接口,仅为向后兼容性保留。它返回以下函数的过滤版本。

pyclbr.readmodule_ex(module, path=None)

返回一个基于字典的树,其中包含模块中用 defclass 语句定义的每个函数和类的函数或类描述符。返回的字典将模块级函数和类名映射到它们的描述符。嵌套对象会添加到其父级的 children 字典中。与 readmodule 一样,module 指定要读取的模块,path 会添加到 sys.path 的前面。如果读取的模块是一个包,则返回的字典会有一个键 '__path__',其值是一个包含包搜索路径的列表。

3.7 版本新增: 嵌套定义的描述符。它们通过新的 children 属性访问。每个都有一个新的 parent 属性。

这些函数返回的描述符是 Function 和 Class 类的实例。用户不应创建这些类的实例。

函数对象

class pyclbr.Function

Function 实例描述由 def 语句定义的函数。它们具有以下属性

file

定义函数的文件名。

module

定义所描述函数的模块名称。

name

函数名。

lineno

文件中定义开始的行号。

parent

对于顶级函数,为 None。对于嵌套函数,为其父级。

在 3.7 版本加入。

children

一个 dictionary,将名称映射到嵌套函数和类的描述符。

在 3.7 版本加入。

is_async

对于使用 async 前缀定义的函数,为 True,否则为 False

在 3.10 版本加入。

类对象

class pyclbr.Class

Class 实例描述由 class 语句定义的类。它们与 Functions 具有相同的属性,并额外有两个属性。

file

定义类的文件名。

module

定义所描述类的模块名称。

name

类名。

lineno

文件中定义开始的行号。

parent

对于顶级类,为 None。对于嵌套类,为其父级。

在 3.7 版本加入。

children

一个字典,将名称映射到嵌套函数和类的描述符。

在 3.7 版本加入。

super

一个 Class 对象列表,描述所描述类的直接基类。被命名为超类但无法通过 readmodule_ex() 发现的类将作为包含类名的字符串列出,而不是 Class 对象。

methods

一个 dictionary,将方法名映射到行号。这可以从新的 children 字典中派生,但为了向后兼容性而保留。