46

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

インポートするファイルをフォルダに入れると、インポートできなくなります。別のフォルダーからファイルをインポートする方法は?

前もって感謝します

4

4 に答える 4

31

プロジェクト フォルダーにファイルを作成する__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 パッケージを選び、それがどのように行われたかを確認することです。手始めに、DjangoTwistedをチェックします。

于 2008-12-24T17:31:40.117 に答える
22

「良い習慣なので、それぞれ別のファイルに入れたいと思います。」

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

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

于 2008-12-24T17:42:54.963 に答える
12

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
于 2008-12-24T17:33:00.410 に答える
6

__init__.py簡単な答えは、作成した新しいフォルダーで呼び出される空のファイルを作成することです。次に、最上位の .py ファイルに次のようなものを含めます。

import mynewsubfolder.mynewclass
于 2008-12-24T17:33:09.333 に答える