質問

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

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

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

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

役に立ちましたか?

解決

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

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

他のヒント

ファイルごとに1つのクラスに固執したい場合(これは論理的ですが、誤解しないでください)、 automobile.Automobile

from automobile import Automobile
car = Automobile()

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

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

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

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

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

曖昧なガイドラインとして:ファイルごとに複数のクラスがpythonの標準です

また、 Pythonクラスの数を参照してください1つのファイルに入れますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top