Pythonで一つのファイルにクラスを複数定義するべきか?

一つのファイルに一つのクラスというルールが存在するjavaとは違いpython複数のクラスを一つのファイルに定義しても別に規約上は問題ない。

しかし、実践的にはどちらが適切か??

 

Pythonのファイルは"module"と呼ばれる

まず、基本事実としてPythonのファイルは"module"*1呼ばれ、我々はpythonで実装された各moduleをインポートすることで使用する*2module単位でテストしたり、moduleの入れ替えで機能を追加変更したりすることができるようにこころがけるべきだ。moduleは、できるだけ他のmoduleとの結合度を弱めて、独立性を高めることが望ましい。

すでに述べたようにpythonではルール上一つのモジュールに複数のclassを定義してよいのだから、一つのモジュールにいくつクラスを定義するかはそのコードの規模と機能を、上のモジュールの要件を満たすように決めれば良い。当然クラスごとに分割しすぎるとファイル数が見る見る間に多くなって管理しづらいだろう。

まとめ:

Pythonではまとめて管理されるべきクラスならひとつのファイルに定義しても良い。

 

 

Ref

[Python] One module per class, bad idea? - Grokbase

use modules to organize things in a way that makes sense to the code that uses your components.

make the import statements look good. 

 

*1:moduleを明示的にサポートする言語として、Ada、D言語、F言語、FORTRANPascal、ML、Modula-2、PythonRuby などがある。

*2:ディレクトリはpackageと呼ばれる)。moduleは再利用しやすいように心がける必要がある。すなわち、