"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" 语句
   定义的函数和类相对应的函数和类描述器。 被返回的字典会将模块层级的函
   数和类名映射到它们的描述器。 嵌套的对象会被输入到它们的上级子目录中
   。 与 readmodule 一样，*module* 指明要读取的模块而 *path* 会被添加
   到 sys.path。 如果被读取的模块是一个包，则返回的字典将具有
   "'__path__'" 键，其值是一个包含包搜索路径的列表。

在 3.7 版本加入: 嵌套定义的描述器。 它们通过新的子属性来访问。 每个定
义都会有一个新的上级属性。

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


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

class pyclbr.Function

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

   file

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

   module

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

   name

      函数名称。

   lineno

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

   parent

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

      在 3.7 版本加入.

   children

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

      在 3.7 版本加入.

   is_async

      "True" 针对使用 "async" 前缀定义的函数，其他情况下为 "False"。

      在 3.10 版本加入.


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

class pyclbr.Class

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

   file

      类定义所在的文件名称。

   module

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

   name

      类名称。

   lineno

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

   parent

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

      在 3.7 版本加入.

   children

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

      在 3.7 版本加入.

   super

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

   methods

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