我的团队正在使用 Django 进行大型项目。为了简单起见,这里用普通的 Python 来说明问题(原始问题有模型和应用程序而不是类(我知道它们都是类)和包(我知道它们也是包))。
一个.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 ,然后从头开始,这将永远重复。蟒蛇说:
[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
解决方案之一是每个对象有一个文件。像 C++ 或 Java 这样的东西。然后我想起了 Guido 关于 Python 的话:“不要用 Python 编写 Java(或 C++,或 Javascript,...)。”。是否有更多 Pythonic 方式来处理这个问题?
感谢任何建议!