web-dev-qa-db-ja.com

Python:クラスごとに1つのモジュール(ファイル.py)?

2週間前にpythonでプログラミングを始めました。以前にJavaやC#などの言語で行ったように、クラスごとに個別のファイル(モジュール)を作成しています。しかし今、他の人からのチュートリアルやコードを見て、多くの人が同じファイルを使用して複数のクラスとメイン関数を定義していることに気付きましたが、それが単なる例であるか、それとも理由でそうするのかわかりませんこれはpython規則またはそのようなものです(同じファイル内の多くのクラスを定義してグループ化するため)。

それで、Pythonでは、クラスごとに1つのファイル、または特定の機能でグループ化できる場合は同じファイル内の多数のクラスですか? (片側の自動車と反対側の車両のように)。

それぞれが独自のスタイルを持っていることは明らかですが、私が尋ねるときは、とにかく、誰かが彼自身のスタイルとその理由について私に意見を述べたい場合は、一般的な答えまたは単なる慣習を願っています。 ;)

14
Drumnbass

クラスごとに1つのファイル

こんなことしないで。 Javaでは、通常、ファイルに複数のクラスを含めることはできません(もちろん、 nest も可能です)。

Pythonでは、relatedクラスを1つのファイルにグループ化すると、安全になります。 Python標準ライブラリ を見てください:多くのモジュールには、1つのファイルに複数のクラスが含まれています。

なぜですか?要するに:読みやすさ。私は個人的に、関連するコードや類似のコードを読むためにファイルを切り替える必要がないことを楽しんでいます。また、インポートがより簡潔になります。

想像してみてください socketserver.pyUDPServerTCPServerForkingUDPServerForkingTCPServerThreadingUDPServerThreadingTCPServerBaseRequestHandlerStreamRequestHandlerDatagramRequestHandlerを9つのファイルに分割します。これらをどのようにインポートしますか?このような?

from socketserver.tcp.server import TCPServer
from socketserver.tcp.server.forking import ForkingTCPServer
...

それは明白なオーバーヘッドです。あなたがそれを書くとき、それはオーバーヘッドです。あなたがそれを読むとき、それはオーバーヘッドです。これは簡単ではありませんか?

from socketserver import TCPServer, ForkingTCPServer

とはいえ、各クラスを1つのファイルに入れれば、誰もあなたを止めることはできません。 Pythonic ではないかもしれません。

9
miku

Pythonには、パッケージ、モジュール、およびクラスの概念があります。モジュールごとに1つのクラスを配置すると、モジュールを持つ利点がなくなります。巨大なクラスの場合、このクラスを別のファイルに入れても問題ないかもしれませんが、繰り返しになりますが、大きなクラスがあるのは良いことですか?いいえ、テストと保守は困難です。特定のタスクを持つ小さなクラスを増やし、それらをできるだけ少ないファイルに論理的にグループ化することをお勧めします。

4
Daniel

ファイルごとに1つのクラスがあることは間違いではありません。 Pythonはオブジェクト指向設計を直接目的としていないため、ファイルごとに複数のクラスを使用する必要があります。

「適切な」方法が何であるかについて混乱している場合は、いくつかのスタイルガイドを読むことをお勧めします。

Googleのスタイルガイド または公式 Python Foundation によるスタイルガイド)のいずれかをお勧めします

また、Pythonのイディオムとメタ分析に関連するその他の資料は PEPインデックス にあります。

2
Chris