0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonの__init__.py、__all__とはなんなのか

Posted at

結論

init.pyとは

  • Pythonパッケージをimportしたときに、初期設定として実行されるコード類のこと1
  • 省略可能だが、書くのが一般的

__all__とは

  • __init__.py内に書く
  • from package import *と書かれたときに、importできるモジュール名のリストのこと2
  • 書き方は以下のとおり
    __all__ = [
        "module_name_a",
        "module_name_b"
    ]
    

これがないとどうなる?

init.py

  • Python3.2までは、__init__.pyが存在しないと、複数の*.pyファイルをパッケージとして扱わず、個別のスクリプトとして扱うことになっていた
  • __init__.pyを保存したディレクトリは、Pythonはパッケージとみなすので、以下の書き方で外部ファイルからimportできる
    import package_name
    
  • package_name = __init__.pyを保存したディレクトリ名となる
  • 現在は省略可能だが、初期化処理を書けることから書くのが一般的

__all__

  • from package_name import *で、__init__.pyで明示的に定義された名前だけが読み込まれる
  • 使用時に直接importが想定されていないもの、セキュリティ上読み込ませたくないモジュールなども全てimportされてしまう
  1. Python チュートリアル 6.4. パッケージ

  2. Python チュートリアル 6.4.1. パッケージから * を import する

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?