Python の クラスを外部化するのに迷う
大して難しい話でもない。
from hoge import fuga
の話。
適当に書いていたスクリプトがだんだん大きくなってきて、主処理のあるファイルにクラスが3つくらいできてきたので、これを独立させたい。その場合どうするのが良いのか。
pythonでは検索パスにあるフォルダをパッケージとしてimportで外部ファイルに定義されたものをインポートできる。ただし、ファイル名もパッケージ同様に扱える。
つまり、hoge/fuga.py
に class Piyo
がある場合。
from hoge.fuga import Piyo piyo_instance = Piyo()
という書き方になる。Javaをやっていた感覚でいくと、この記法の場合、hoge/fuga/Piyo.py
に class Piyo
が定義されている感覚になる。でその感覚が抜けないのか、1ファイル1クラス定義にしてほしい、と思っている。といってその感覚通りに作ると、こんな使い方をしなければならない
from hoge.fuga.Piyo import Piyo piyo_instance = Piyo()
Piyoパッケージができてしまう。これをさけようとすると、hoge/fuga.py
にせざるを得なくなってしまうが、1パッケージ内1クラスというのもばかばかしい、と思うとこのファイルに複数のクラスを書く事になってしまうのでこれはこれで妙だ。となると
from hoge.fuga.Piyo import Piyo piyo_instance = Piyo()
で納得しておくのが良いような気もする。 しかしdjangoなどでモデルクラスを定義するファイルなどは models.py 1ファイルなので複数クラスを1ファイルにまとめる方が正しいのかとも考えてしまう。