1 つのファイルにクラスをいくつ入れる必要がありますか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/106896

  •  01-07-2019
  •  | 
  •  

質問

私は、ファイルごとに 1 つのパブリック クラスを持つことができる Java モデルに慣れています。Python にはこの制限がないので、クラスを編成するためのベストプラクティスは何だろうかと考えています。

役に立ちましたか?

解決

Python ファイルは「モジュール」と呼ばれ、ソフトウェアを「意味のあるもの」に編成する 1 つの方法です。もう 1 つは「パッケージ」と呼ばれるディレクトリです。

モジュールは、1 ~ 20 個の密接に関連したクラスを持つ個別のものです。重要なのは、モジュールはインポートするものであり、ソフトウェアを読み、保守し、拡張する人にとってそのインポートが完全に意味のあるものである必要があるということです。

ルールは次のとおりです。 モジュールは再利用の単位です.

単一のクラスを簡単に再利用することはできません。モジュールは問題なく再利用できるはずです。ライブラリ内のすべて (およびダウンロードして追加するすべて) は、モジュールまたはモジュールのパッケージのいずれかです。

たとえば、スプレッドシートを読み取り、計算を実行し、結果をデータベースにロードする作業を行っているとします。メインプログラムをどのようなものにしたいですか?

from ssReader import Reader
from theCalcs import ACalc, AnotherCalc
from theDB import Loader

def main( sourceFileName ):
    rdr= Reader( sourceFileName )
    c1= ACalc( options )
    c2= AnotherCalc( options )
    ldr= Loader( parameters )
    for myObj in rdr.readAll():
        c1.thisOp( myObj )
        c2.thatOp( myObj )
        ldr.laod( myObj )

インポートは、コードを概念またはチャンクに整理する方法であると考えてください。各インポートに含まれるクラスの正確な数は重要ではありません。重要なのは、あなたが描いている全体的な組織です。 import 発言。

他のヒント

人為的な制限はないので、実際は何が理解できるかによって決まります。論理的にグループ化された、かなり短くて単純なクラスが多数ある場合は、それらを大量に放り込んでください。大きくて複雑なクラス、またはグループとして意味をなさないクラスがある場合は、クラスごとに 1 つのファイルを使用します。あるいは、その中間のものを選択してください。状況の変化に応じてリファクタリングします。

私が Java モデルを気に入っている理由は次のとおりです。各クラスを個別のファイルに配置すると、ソース コードを参照するときにクラスが見やすくなり、再利用が促進されます。多数のクラスが 1 つのファイルにグループ化されている場合、プロジェクトのファイルを参照するだけで再利用できるクラスがあることが他の開発者には分からない可能性があります。 ディレクトリ構造. 。したがって、クラスを再利用できる可能性があると思われる場合は、それを独自のファイルに置くと思います。

それは、プロジェクトの大きさ、クラスの長さ、クラスが他のファイルから使用されるかどうかなどによって完全に異なります。

たとえば、私はデータ抽象化に一連のクラスを頻繁に使用します。そのため、わずか 1 行の長さのクラスが 4 つまたは 5 つある場合があります (class SomeData: pass).

これらをそれぞれ別のファイルに分割するのは愚かです。ただし、別のファイルから使用される可能性があるため、これらすべてを別のファイルに置きます。 data_model.py ファイルは意味があるので、できます from mypackage.data_model import SomeData, SomeSubData

クラス内に多くのコードが含まれており、おそらくそのクラスでのみ使用される関数が含まれている場合は、このクラスとヘルパー関数を別のファイルに分割することをお勧めします。

そうするように構造化する必要があります from mypackage.database.schema import MyModel, 、 ない from mypackage.email.errors import MyDatabaseModel - インポート元が理にかなっていて、ファイルの長さが数万行に満たない場合は、正しく整理されています。

Python モジュールのドキュメント パッケージの整理に関する役立つ情報がいくつかあります。

ファイルの大きさにイライラしたときや、望ましい関連性の構造が自然に現れ始めたとき、私は物事を分割していることに気づきます。多くの場合、これら 2 つの段階は同時に発生するように見えます。

物事をあまりにも早く分割すると、まったく異なる構造の順序が必要であることがわかり始めるため、非常に面倒になる可能性があります。

一方、.java または .py ファイルが約 700 行を超えると、「その特定のビット」がどこにあるのかを常に思い出そうとするのにイライラし始めます。

Python/Jython では、インポート ステートメントの循環依存関係も役割を果たしているようです。あまりにも多くの連携する基本構成要素を個別のファイルに分割しようとすると、言語のこの「制限」/「不完全さ」により、おそらくかなり賢明な方法で、物事をグループ化することを強制されるようです。

パッケージへの分割については、実際にはわかりませんが、おそらく迷惑と幸せな構造の出現に関する同じルールがモジュール性のすべてのレベルで機能すると思います。

ファイルを大きく複雑にしすぎずに、論理的にグループ化できる限り多くのクラスをそのファイル内に配置することをお勧めします。

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