45

私は通常、クラスごとに1つのファイルを作成するバックグラウンドから来ています。共通のクラスもディレクトリの下に整理しています。この方法は私には直感的であり、C ++、PHP、JavaSriptなどで効果的であることが証明されています。

このメタファーをPythonに取り込むのに問題があります。ファイルはもはや単なるファイルではなく、正式なモジュールです。モジュールに1つのクラスだけを含めるのは正しくないようです---ほとんどのクラスはそれ自体では役に立たないです。私がクラスを持っている場合、それを常に参照するのはばかげているようautomobile.pyです。Automobileautomobile.Automobile

しかし同時に、大量のコードを1つのファイルに入れて、それを1日と呼ぶのは正しくないようです。明らかに、非常に複雑なアプリケーションには5つ以上のファイルが必要です。

正しい---またはpythonic---方法は何ですか?(または、正しい方法がない場合、どのような方法とその理由をお勧めしますか?)Pythonモジュールにどのくらいのコードをスローする必要がありますか?

4

5 に答える 5

36

「パッケージングの論理単位」の観点から考えてください。これは単一のクラスである場合もありますが、多くの場合、緊密に連携する一連のクラスになります。クラス(またはモジュールレベルの関数-モジュールレベルの関数も選択肢として利用できる場合は、常に静的メソッドを使用して「PythonでJavaを実行」しないでください!-)は、この基準に基づいてグループ化できます。基本的に、AのほとんどのユーザーがBも必要とし、その逆の場合、AとBはおそらく同じモジュールにあるはずです。ただし、多くのユーザーが一方だけを必要とし、もう一方は必要ない場合は、おそらくそれらは別個のモジュール(おそらく同じパッケージ内、つまり__init__.pyファイルを含むディレクトリ内)にある必要があります。

標準のPythonライブラリは、完璧にはほど遠いものの、(ほとんど)合理的に優れたプラクティスを反映する傾向があります。そのため、ほとんどの場合、例から学ぶことができます。たとえば、threadingモジュールはもちろんThreadクラスを定義します...しかし、ロック、イベント、条件、セマフォなどの同期プリミティブクラスと、スレッド操作(およびその他のいくつかのもの)によって発生する可能性のある例外クラスも保持します。 )。それは妥当なサイズ(空白とdocstringを含む800行)の上限にあり、キューなどのいくつかの重要なスレッド関連の機能は別のモジュールに配置されていますが、それでもなお意味のある機能の最大量の良い例です単一のモジュールにパックします。

于 2009-11-26T07:02:23.417 に答える
10

ファイルごとに1つのクラスのシステムに固執したい場合(論理的ですが、誤解しないでください)、参照する必要がないように、次のようなことを行うことができますautomobile.Automobile

from automobile import Automobile
car = Automobile()

ただし、cobbalが述べているように、Pythonではファイルごとに複数のクラスがかなり一般的です。いずれにせよ、賢明なシステムを選び、それを一貫して使用する限り、Pythonユーザーがあなたに腹を立てることはないと思います:)。

于 2009-11-26T06:48:46.253 に答える
8

C ++の観点から来ている場合は、.soまたは.dllに似たPythonモジュールを表示できます。ええ、Pythonはスクリプト化されているため、ソースファイルのように見えますが、実際には特定の機能のロード可能なライブラリです。

役立つかもしれない別のメタファーは、Pythonモジュールを名前空間として見るかもしれないということです。

于 2009-11-26T07:06:51.333 に答える
4

中規模のプロジェクトでは、密接に関連するクラスのセットがいくつかあることに気づきました。これらのセットのいくつかは現在、ファイルにグループ化されています。たとえば、低レベルのネットワーククラスはすべて単一のnetworkモジュールにあります。ただし、最大のクラスのいくつかは、独自のファイルに分割されています。

おそらく、ファイルごとに1つのクラスの履歴からそのパスを開始する最良の方法は、通常は同じディレクトリに配置するクラスを取得し、代わりにそれらを同じファイルに保持することです。そのファイルが大きくなりすぎた場合は、分割します。

于 2009-11-26T06:59:17.090 に答える
3

漠然としたガイドラインとして:ファイルごとに複数のクラスがPythonの標準です

また、1つのファイルにいくつのPythonクラスを入れる必要があるかを参照してください。

于 2009-11-26T06:39:59.220 に答える