__init__.py を使用する 質問する

__init__.py を使用する 質問する

__init__.pyプロジェクト内のPython ファイルの使用シナリオや設計目標を理解するのが困難です。

次のファイルを含む「モデル」ディレクトリ(パッケージを参照)があると仮定します。

  1. __init__.py
  2. meta.py
  3. solrmodel.py
  4. mongomodel.py
  5. samodel.py

2つの使用方法を見つけました__init__.py:

  1. 、、で使用する必要のある共通の定義がありますsolrmodel.py。をすべての *model.py クラスの基本/共通定義として使用できますか? つまり、 をインポートする必要があります。mongomodel.pysamodel.py__init__.pymodel/__init__.py

  2. または、__init__.pysolrmodel.py、mongomodel.py、samodel.py の定義を独自にインポートし、次のようにクラスまたは関数を簡単にインポートできるようにします。

    # file: __init__.py
    
    from mongomodel import *
    from solrmodel import *
    from samodel import *
    

    (推奨されていないことは承知していますimport *が、慣例的に使用しています)

上記の 2 つのシナリオのどちらかを選ぶことができませんでした。 には他にも使用シナリオがありますか__init__.py? また、その使用方法を説明していただけますか?

ベストアンサー1

私が作成するファイルの大部分は__init__.py空です。多くのパッケージには初期化するものがないためです。

初期化が必要な場合の1つの例としては、パッケージのロード時に大量のデータを一度に読み込みたい場合(ファイル、DB、Webなどから)です。その場合、多くのパッケージ内のプライベート関数にその読み込みを入れる方が、__init__.py別の「初期化モジュール」を用意して、パッケージ内の実際のモジュールからそのモジュールを冗長にインポートするよりも良いでしょう(無駄に繰り返しが多く、エラーが発生しやすい:これは明らかに、パッケージの言語の保証に頼るケースです)。__init__.py パッケージ内のどのモジュールよりも先に一度ロードされる方が、明らかに Python らしいです。

その他の具体的かつ権威ある意見の表現については、Python の標準ライブラリの一部であるさまざまなパッケージで採用されているさまざまなアプローチを参照してください。

おすすめ記事