Diary?

2009-06-22
Mon

(10:24)

Python でそれなりに複雑なモジュール群を作っていると、循環/相互 import の問題にぶち当たることがある。これは読んで字のごとく import 文がループしてしまっている状態の事で、以下のようなファイルを作ることで簡単に再現できる。

#a.py
from b import B
A = 0

#b.py
from a import A
B = 1

ちなみに相互に import しあっても問題のない言語であっても、そのようなモジュールは結合がやたら密なので、基本的にテストしにくく拡張性にも問題がある。つまり真の問題はモジュール間の密結合にあるわけだ。なので相互 import のような問題が起きた場合、何かトリックを使って import 可能にしようなどと思わずに、インターフェースの分離/高階関数/DIなどの技術を使ってモジュール間の結合性を疎にした方がいいだろう。

Creative Commons
この怪文書はクリエイティブ・コモンズ・ライセンスの元でライセンスされています。引用した文章など Kuwata Chikara に著作権のないものについては、それらの著作権保持者に帰属します。