__all__とは?

__all__は、Pythonモジュール内で公開したいシンボル(関数、クラス、変数など)を明示的に定義するためのリストです。特にfrom module import *を使用する際に、インポートされるシンボルを制御する役割があります。

使い方の例

__all__ = ['foo', 'bar']
def foo():
    return "foo"
def bar():
    return "bar"
def baz():
    return "baz"

この例では、foobarのみがインポート可能になり、bazはインポートされません。

__all__の効果

  1. import *時の制御: __all__が定義されていれば、from module import *はそのリストに含まれるシンボルのみをインポートします。
  2. コードの可読性とメンテナンス性の向上: モジュールの公開インターフェースを整理し、他の開発者が使用する際にどのシンボルが重要かを明示できます。

注意点

__all__import *にのみ影響を与えるため、明示的にfrom module import fooのように指定した場合には関係なくインポートできます。また、通常import *は推奨されておらず、特に大規模なプロジェクトでは名前空間の衝突を避けるために注意が必要です。

__all__は、モジュールの公開APIを整理し、意図しないシンボルのエクスポートを防ぐための重要なツールです。正しい使い方をマスターし、コードの明確さと保守性を向上させましょう。