09

Python の クラスを外部化するのに迷う

大して難しい話でもない。

from hoge import fuga 

の話。 適当に書いていたスクリプトがだんだん大きくなってきて、主処理のあるファイルにクラスが3つくらいできてきたので、これを独立させたい。その場合どうするのが良いのか。 pythonでは検索パスにあるフォルダをパッケージとしてimportで外部ファイルに定義されたものをインポートできる。ただし、ファイル名もパッケージ同様に扱える。 つまり、hoge/fuga.pyclass Piyo がある場合。

from hoge.fuga import Piyo 

piyo_instance = Piyo()

という書き方になる。Javaをやっていた感覚でいくと、この記法の場合、hoge/fuga/Piyo.pyclass 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ファイルにまとめる方が正しいのかとも考えてしまう。