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 语句在模块中定义的每个函数和类的描述符。返回的字典将模块级函数和类名映射到它们的描述符。嵌套对象将输入到其父级的子级字典中。与 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 字典派生,但仍保留用于向后兼容。