重複の可能性:
Python での循環 (または循環) インポート
a.py
import b
class Abstract(object):
pass
class Concrete(Abstract):
def get_newthing(self):
return b.NewThing()
(注: a.py の主要なリファクタリングを行うのは難しいでしょう)
b.py
import a
#reload(a)
class NewThing(a.Abstract):
pass
書かれているように、「import b、a」を実行すると機能しますが、「import a」を実行すると
AttributeError: 'module' object has no attribute 'Abstract'
Python が a.py の「import b」行に到達すると、b のインポート中に、まだ作成されていない「a.Abstract」にアクセスしようとします。
ただし、reload ステートメントを含めると、Python が a.py モジュールに戻り、b.py に進む前に Abstract クラスを作成するため、"import a" を問題なく実行できます。したがって、うまくいくようです(ただし、リロードを行う前に hasattr チェックを追加する必要があります)。
このインポート ループの問題を解決する方法を探していましたが、これらの提案に沿った提案は見当たりませんでした。このように reload() を使用する際に落とし穴はありますか?