pythonモジュールとパッケージ

1742 ワード

@(python)
モジュールパッケージ組織コード
次のパッケージの階層で構成されています.
├── module_a.py
├── package_bc
│   ├── __init__.py
│   ├── module_b.py
│   ├── module_c.py
│   └── package_sub
│       ├── __init__.py
│       └── module_s.py
├── package_de
│   ├── __init__.py
│   ├── module_d.py
│   └── module_e.py
└── test.py

各フォルダは1つのパケットに対応し、パケットの中には複数のパケットを含むことができ、対応する各パケットに対応する.pyファイルは特定のモジュールです.パッケージ化され、ファイルにコードを整理した後、各ディレクトリに__init__.pyファイルが必要であることを確認すればよい.デフォルトではこのファイルは空で、importがパケットに対応するときに呼び出されます.インポートパケットの初期化設定として他の文を書き込むこともできます.以下のようにします.
#  package_de/__init__.py
#!/usr/bin/env python
# coding=utf-8
# by orientlu
from . import module_d
from .module_e import module_e_fun
if __name__ == "__main__":
   pass

パッケージをインポートするときにサブモジュールをインポートしました.注意2つのモジュールをインポートする書き方のわずかな違い、再インポート後の呼び出し方式の違い.
複数についてpyファイルはそれぞれ複数のクラスを定義していますが、これらのファイルを1つのモジュールに帰属したい場合はmodule_を参照してください.eインポート方式.
上記の階層のモジュール組織について、各パッケージのモジュールの例を呼び出します.
## test.py 
#!/usr/bin/env python
# coding=utf-8
# by orientlu

import module_a as ma
import package_bc.module_c
import package_bc.module_b as mb
import package_bc.package_sub.module_s as ms
import package_de

if __name__ == "__main__":
    ma.module_a_fun()
    mb.module_b_fun()
    package_bc.module_c.module_c_fun()
    ms.module_s_fun()
    package_de.module_d.module_d_fun()
    package_de.module_e_fun()

制限モジュールすべてのコンテンツのインポート
一般的にはfrom module import *は推奨されず、多くの不要なモジュールコンテンツを導入すると、現在のネーミングスペースを汚染しやすい.
モジュールに何もしていない場合は、上記の文を実行すると、モジュール内の下線で始まる関数、変数がすべてインポートされます.モジュールに文__all__ = ['fun1', 'fun2']を追加することで制限
テストコード
リファレンス
python3-codebook