2009-07-07 5 views
34

可能性の重複:クラスとファイルの間:1の比率私はほとんどの部分は、1があります、というように私のクラスを編成することに慣れて成長してきたC++の背景から来る
How many Python classes should I put in one file?1つのファイル内の複数のクラスが推奨されていますか?

。 1つのファイルに1つのクラスが含まれるようにすることで、コードをよりナビゲートすることができます。私が自分自身をPythonに紹介するにつれ、私は1つのファイルに複数のクラスが含まれている例をたくさん見つけています。それはPythonでやり遂げるために推奨される方法ですか?もしそうなら、なぜですか?

PEP8でこの規約がありませんか?

+2

重複:http://stackoverflow.com/questions/106896/how-many-python-classes-shouldi-i-put-in-one-file/107836#107836 –

答えて

41

は、いくつかの可能な理由である:

  1. パイソン排他クラスベースではない - Pythonでコード分解の天然の単位モジュールです。モジュールは、(Pythonのファーストクラスのオブジェクトである)関数をクラスとして含む可能性が高いです。 Javaでは、分解の単位がクラスです。したがって、Pythonは一つのモジュール=つのファイルを有し、およびJavaは、一つ(パブリック)クラス=つのファイルを有しています。
  2. Pythonははるかに表現力のJavaよりも、あなたは(Pythonはやってからあなたを防ぐことはできません)ファイルごとに1つのクラスに自分自身を制限する場合は、非常に小さなファイルの多くで終わるだろう - 非常に少ないとを追跡するために、より利益。

ほぼ同等の機能の例:Javaのlog4j =>数十個のファイル〜8000 SLOC。 Pythonのログ=> 3つのファイル、〜2800 SLOC。

5

Pythonでは、クラスは小さなタスク(グループ化など)にも使用できます。 1:1のリレーションシップを維持すると、機能が多少少ないファイルが多すぎることになります。

14

"フラットはネストされたものより優れています"という階層は、一般に階層の過度使用を嫌うものです。私は、新しいモジュールを作成したいときには、厳密で迅速なルールはないと考えています。ほとんどの場合、人々は論理的に関連する機能(特定の問題ドメインに関連するクラスや機能) 。

良い thread from the Python mailing list

、そしてフレドリックLundhにすることにより引用:

さらに重要なPythonで、 はあなたがevery- 事のためのクラスを使用していないということです。あなたは、工場、 シングルトン、 オブジェクトを作成するための複数の方法、多型ヘルパーなどが必要な場合は、プレーンな機能ではなく、クラスや 静的メソッドを使用し 。

あなたのコンポーネントを使用するコードを することは理にかなっていた方法で 物事を整理するために、使用モジュール「それはすべての クラスだ」乗り越えしたら。
インポートステートメントがよく見えるようにします。

+1

階層部分の過度使用についての説明が大好きです。時には、コードが階層内で過度に使用されている場合、コードを理解することは非常に困難です。特にうまく文書化されていないと、「こんにちは世界」のコードさえ頭痛になる – MuhsinFatih

3

具体的な規約はありません。コードを最も読みやすく保守しやすいものにします。ここ

2

ブックExpert Python Programming持っているものに関連する議論
第4章:良い名前を選択する:そして、「名前空間ツリーの構築」「分割コード」
マイラインの粗要約:1つのモジュールにいくつかの関連クラスを収集する(ソースファイル) 、および 関連するモジュールを1つのパッケージにまとめて、コードを管理するのに役立ちます。

1

クラスごとに別々のファイルを持たないという良い例は、djangoアプリケーション内のmodels.pyファイルです。それぞれのdjangoアプリには、そのアプリに関連するクラスがいくつかあり、それらを個々のファイルに入れるだけでもっと多くの作業ができます。

同様に、別のファイルにそれぞれのビューを表示することは、逆効果である可能性があります。

関連する問題