TypeScript の index.ts を使ったバレルエクスポートのように、Python でディレクトリ以下のモジュールを一括で読み込みます
モジュールを構築していると、循環参照の回避やファイルの複雑化を防止するために、ファイルを分割することがあります
一方で、これらをインポートする場合は、呼び出しが冗長になることがしばしばあります
例えば、以下のような構造でファイルが格納されているとします
project/├── main.py└── calculation/├── __init__.py├── add.py // たし算メソッド add を定義├── sub.py // ひき算メソッド sub を定義├── mul.py // かけ算メソッド mul を定義└── div.py // わり算メソッド div を定義
このような状況で main.py が 4 つのモジュールをインポートしたい場合は、
from calculation.add import addfrom calculation.sub import subfrom calculation.mul import mulfrom calculation.div import div
といった具合にかなり冗長になります
これらを 1 行でまとめてインポートできると見やすくわかりやすいです
そこで、以下のように calculation/__init__.py にまとめたいファイルを登録すると、一括でインポートできます
"""Entry point for the calculation modules"""from .add import addfrom .sub import subfrom .mul import mulfrom .div import div__all__ = ['add','sub','mul','div']
main.py からは以下のようにインポートすることができます 🎉
from calculation import add, sub, mul, divおわりに
当たり前ではありますが、同じ名前のモジュールをそのままエクスポートすることはできないので __init__.py でモジュールを読み込む際に as を使って回避する必要があります 🐶