【发布时间】:2012-09-10 13:28:35
【问题描述】:
我的团队正在使用 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 来自 a 包,然后从头开始,永远重复。 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
其中一种解决方案是每个对象有一个文件。像 C++ 或 Java 这样的东西。然后我想起了 Guido 关于 Python 的话:“不要用 Python 编写 Java(或 C++,或 Javascript,...)。”。有没有更多的 Pythonic 方式来处理这个问题?
感谢您的任何建议!
【问题讨论】:
标签: python architecture import infinite-loop