# `pyclbr` --- Python 模組瀏覽器支援

原始碼：Lib/pyclbr.py

`pyclbr` 模組可以提供一個使用 Python 編寫的模組中定義的函式、類別和方法的有限資訊。這些資訊足以實作一個模組瀏覽器。這些資訊是從 Python 原始碼中抽取出來的，而不是透過引入模組，因此這個模組可以安全地與不信任的程式碼一起使用。此限制使得此模組無法與非 Python 實作的模組一起使用，包括所有標準與可選的擴充模組。

pyclbr.readmodule(module, path=None)

  回傳模組層級的類別名稱與類別描述器對應的字典。如果可能的話，會包含引入基底類別的描述器。參數 module 是包含要讀取的模組名稱的字串；它可以是套件中的模組名稱。如果給定，path 是以 `sys.path` 為前綴的目錄路徑序列，用來定位模組原始碼。

  此函式為原始介面，僅保留用於向後相容性。它回傳的會是 readmodule_ex 回傳結果的篩選後版本。

pyclbr.readmodule_ex(module, path=None)

  回傳一個以字典為基礎的樹狀結構，包含在模組中以 `def` 或 `class` 陳述式定義的每個函式和類別的函式或類別描述器。回傳的字典會將模組層級的函式和類別名稱對映到它們的描述器。巢狀物件會輸入其父物件的子字典。與 readmodule 一樣，module 會指定要讀取的模組，而 path 則會預先加入 sys.path。如果要讀取的模組是一個套件，回傳的字典有一個 key `'__path__'`，其值是一個包含套件搜尋路徑的串列。

在 3.7 版被加入: 巢狀定義（nested definitions）的描述器。這些描述器可透過新的子屬性來存取。每個描述器都有一個新的父屬性。

這些函式所回傳的描述器是 Function 和 Class 類別的實例。使用者不需要建立這些類別的實例。

## 函式物件

class pyclbr.Function

  Class `Function` 實例描述由 def 陳述式定義的函式。它們具有以下屬性：

  file

    定義函式的檔案名稱。

  module

    定義所述函式的模組名稱。

  name

    函式的名稱。

  lineno

    檔案中定義開始的行號。

  parent

    對於頂層函式（top-level functions）為 `None`。對於巢狀函式，則使用父函式。

    在 3.7 版被加入.

  children

    一個 `dictionary` 將名稱對應到巢狀函式和類別的描述器。

    在 3.7 版被加入.

  is_async

    對於使用 `async` 前綴定義的函式是 `True`，否則是 `False`。

    在 3.10 版被加入.

## 類別物件

class pyclbr.Class

  Class `Class` 實例描述由 class 陳述式定義的類別。它們具有與 `Functions` 相同的屬性，以及另外兩個屬性。

  file

    定義類別的檔案名稱。

  module

    定義所述類別的模組名稱。

  name

    類別的名稱。

  lineno

    檔案中定義開始的行號。

  parent

    對於頂層類別為 `None`。對於巢狀類別，則使用父類別。

    在 3.7 版被加入.

  children

    將名稱對應到巢狀函式和類別的描述器的字典。

    在 3.7 版被加入.

  super

    描述被描述類別的直接基底類別的 `Class` 物件串列。被命名為超類別（superclasses）但無法被 `readmodule_ex()` 發現的類別會以類別名稱的字串形式列出，而不是 `Class` 物件。

  methods

    一個 `dictionary` 方法名稱對應到行號。這可以從較新的 `children` 字典衍生出來，但為了向後相容性而保留。