web-dev-qa-db-ja.com

私のPythonプロジェクトを整理する

Pythonプロジェクトを開始していて、20以上のクラスがあると予想しています。良い習慣として、それぞれを別々のファイルに入れたいと思います。しかし、プロジェクトディレクトリはすぐにいっぱいになります。ファイルを使って(または私がこれを行うとそうなります)。

インポートするファイルをフォルダに入れると、インポートできなくなります。別のフォルダーからファイルをインポートするにはどうすればよいですか。フォルダー内にあるため、ファイルに含まれているクラスを別の方法で参照する必要がありますか?

前もって感謝します

44
Teifion

プロジェクトフォルダに__init__.pyファイルを作成すると、Pythonではモジュールのように扱われます。

パッケージディレクトリ内のクラスは、次のような構文を使用してインポートできます。

from package import class
import package.class

__init__.py内で、__all__の動作を定義するfrom package import *配列を作成できます。

# name1 and name2 will be available in calling module's namespace 
# when using "from package import *" syntax
__all__ = ['name1', 'name2'] 

そしてここに Pythonのパッケージについて知りたいよりもはるかに多くの情報

一般的に言って、多くのコードを整理する方法を学ぶ良い方法は、人気のあるPythonパッケージを選び、それらがどのように行われたかを確認することです。チェックアウトします Django および ツイスト 、初心者向け。

31
Triptych

「良い習慣として、私はそれらをそれぞれ別々のファイルに入れたいと思います。」

これは実際にはあまり良い習慣ではありません。密接に関連するクラスを含むモジュールを設計する必要があります。

実際問題として、実際に完全に独立しているクラスはありません。通常、クラスは論理的に関連するクラスターまたはグループで提供されます。

22
S.Lott

Pythonは、Javaの厄介なファイルごとに1つのクラスのスタイルを強制することはありません。実際、クラスが巨大でない限り、各クラスを別々のファイルに入れるのは良いスタイルとは見なされていません。 (それらが巨大な場合は、とにかくリファクタリングを行う必要があります。)代わりに、同様のクラスと関数をモジュールにグループ化する必要があります。たとえば、GUI計算機を作成している場合、パッケージレイアウトは次のようになります。

/amazingcalc
   /__init__.py # This makes it a Python package and importable.
   /evaluate.py # Contains the code to actually do calculations.
   /main.py # Starts the application
   /ui.py # Contains the code to make a pretty interface
12

簡単な答えは、作成した新しいフォルダーに__init__.pyという名前の空のファイルを作成することです。次に、トップレベルの.pyファイルに次のようなものを含めます。

import mynewsubfolder.mynewclass
6
fuentesjr