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 pyclbr.Class

Class クラスのインスタンスは、class 文で定義されたクラスを表します。 Function と同じ属性に加えて、さらに 2 つの属性を持ちます。

file

クラスが定義されているファイルの名前。

module

対象のクラスを定義しているモジュールの名前。

name

クラスの名前です。

lineno

ファイル内で定義が始まる行の番号。

parent

トップレベルのクラスでは None、入れ子になったクラスでは親オブジェクト。

Added in version 3.7.

children

名前を、入れ子になった関数とクラスの記述オブジェクトに対応付ける辞書。

Added in version 3.7.

super

対象クラスの直接の基底クラスを表す Class オブジェクトのリスト。 スーパークラスとして名前が指定されていても readmodule_ex() が見つけられないクラスは、Class オブジェクトの代わりにクラス名の文字列として格納されます。

methods

メソッド名を行番号に対応付ける 辞書。 新しい children 辞書から導出できますが、後方互換性のために残されています。