そんな人いませんか?
それは僕です。
例えば、こういう場合。
main.py
from ClassA import *
if __name__ == "__main__":
ClassA()
ClassA.py
from ClassB import ClassB
class ClassA(object):
VALUE = 'value'
def __init__(self):
ClassB()
print('class a')
ClassB.py
from ClassA import ClassA
class ClassB(object):
def __init__(self):
print(ClassA.VALUE)
main.pyを実行すると、こんなエラーでます。
error
Traceback (most recent call last):
File "main.py", line 3, in <module>
from ClassA import *
File "/Users/MS/Desktop/test/ClassA.py", line 3, in <module>
from ClassB import ClassB
File "/Users/MS/Desktop/test/ClassB.py", line 3, in <module>
from ClassA import ClassA
ImportError: cannot import name 'ClassA'
最初は、importがループしてるからエラーでてるのかと思ってましたけど、ちょっと違うみたいです。
「循環インポートとは」に細かく書かれてますけど、ClassAがimportされてる最中に、再度ClassAをimportしようとするとImportErrorとなるようです。
上記の例だと、ClassAがimport中にClassBをimportしようとし、更にその中でClassAの変数を呼び出していますが、ClassAはimportの途中なので不完全な状態です。
しかし、import文が処理された時点でimport済として管理されてしまっているので、ClassBでClassAの再importは行われず、importが完了しているという体で処理を進めようとしてエラーになっているようです。
ふむー、importがループしているという単純なエラーかと思いきや、意外に奥が深かった・・・。