"pyclbr" --- Python 模块浏览器支持
**********************************

**源代码:** Lib/pyclbr.py

======================================================================

"pyclbr" 模块提供了对于以 Python 编写的模块中定义的函数、类和方法的受
限信息。 这种信息足够用来实现一个模块浏览器。 这种信息是从 Python 源代
码中直接提取而非通过导入模块，因此该模块可以安全地用于不受信任的代码。
此限制使得非 Python 实现的模块无法使用此模块，包括所有标准和可选的扩展
模块。

pyclbr.readmodule(module, path=None)

   返回一个将模块层级的类名映射到类描述器的字典。如果可能，将会包括已
   导入基类的描述器。形参 *module* 为要读取模块名称的字符串；它可能是
   某个包内部的模块名称。 *path* 如果给出则为添加到 "sys.path" 开头的
   目录路径序列，它会被用于定位模块的源代码。

   此函数为原始接口，仅保留用于向下兼容。它会返回以下内容的过滤版本。

pyclbr.readmodule_ex(module, path=None)

   返回一个基于字典的树，其中包含与模块中每个用 "def" 或 "class" 语句
   定义的函数和类相对应的函数和类描述器。 被返回的字典会将模块层级的函
   数和类名映射到它们的描述器。嵌套的对象会被录入到其上级对象的
   children 字典中。与 readmodule 一样，*module* 指明要读取的模块而
   *path* 会被添加到 sys.path。如果被读取的模块是一个包，则返回的字典
   将具有 "'__path__'" 键，其值是一个包含包搜索路径的列表。

Added in version 3.7: 嵌套定义的描述器。它们通过新的 children 属性来访
问。每个定义都会有一个新的 parent 属性。

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


Function 对象
=============

class pyclbr.Function

   "Function" 类的实例描述了由 def 语句所定义的函数。它们具有下列属性
   ：

   file

      函数定义所在的文件名称。

   module

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

   name

      函数名称。

   lineno

      定义在文件中起始位置的行号。

   parent

      对于最高层级函数为 "None"。对于嵌套函数则为上级函数。

      Added in version 3.7.

   children

      一个将名称映射到针对嵌套函数和类的描述器的 "字典"。

      Added in version 3.7.

   is_async

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

      Added in version 3.10.


Class 对象
==========

class pyclbr.Class

   "Class" 类的实例描述了由 class 语句所定义的类。它们具有与
   "Function" 相同的属性以及两个额外属性。

   file

      类定义所在的文件名称。

   module

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

   name

      类名称。

   lineno

      定义在文件中起始位置的行号。

   parent

      对于最高层级类为 "None"。对于嵌套的类则为上级类。

      Added in version 3.7.

   children

      将名称映射到嵌套函数和类描述器的字典。

      Added in version 3.7.

   super

      一个由 "Class" 对象组成的列表，这些对象描述了相应类的直接基类。
      被指定为超类但无法被 "readmodule_ex()" 发现的类会作为类名字符串
      而非 "Class" 对象列出。

   methods

      一个将方法名映射到行号的 "字典"。此属性可从更新的 "children" 字
      典中获取，但被保留用于向下兼容。
