私のチームはDjangoとの巨大なプロジェクトに取り組んでいます。簡単にするために、ここに問題を説明するための単純なPythonがあります(元の問題には、クラス(両方がクラスであることを知っています)とパッケージ(両方がパッケージであることも知っています)の代わりにモデルとアプリがあります)。
a.py:
from b import B1
class A1(object):
def __init__(self):
print "object A1"
class A2(object):
def __init__(self):
print "object A2"
A1()
B1()
b.py:
from a import A2
class B1(object):
def __init__(self):
print "object B1"
A2()
a.pyが呼び出されると、bパッケージからB1をインポートしようとしますが、一方、パッケージからA2をインポートしようとすると、最初から永久に繰り返されます。Pythonは言う:
[dagrevis@localhost recursion]$ python2 a.py
Traceback (most recent call last):
File "a.py", line 1, in <module>
from b import B1
File "/home/dagrevis/Python/recursion/b.py", line 1, in <module>
from a import A2
File "/home/dagrevis/Python/recursion/a.py", line 1, in <module>
from b import B1
ImportError: cannot import name B1
解決策の1つは、オブジェクトごとに1つのファイルを作成することです。C++やJavaのようなものがあります。それから私はGuidoがPythonについて言ったことを思い出しました:「PythonでJava(またはC ++、またはJavascript、...)を書かないでください。」この問題に対処するためのPythonの方法は他にもありますか?
アドバイスありがとうございます!