在进行循环导入时,Python 中有一个棘手的极端情况。如果你使用 import 语句的“import ...”形式,像这样:
# a.py
import b
def method_a():
print "Method A called"
def call_b_from_a():
b.method_b()
# b.py
import c
def method_b():
print "Method B called"
def call_c_from_b():
c.method_c()
# c.py
import a
def method_c():
print "Method C called"
def call_a_from_c():
a.method_a()
然后你可以做这样的事情:
>>> import a
>>> a.call_b_from_a()
Method B called
对于 b 和 c 也是如此;简而言之,一切正常。但是,如果您使用 import 语句的“from ... import ...”形式,如下所示:
# a.py
from b import method_b
def method_a():
print "Method A called"
def call_b_from_a():
method_b()
# b.py
from c import method_c
def method_b():
print "Method B called"
def call_c_from_b():
method_c()
# c.py
from a import method_a
def method_c():
print "Method C called"
def call_a_from_c():
method_a()
然后你会得到这样的错误:
>>> import a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "a.py", line 2, in <module>
from b import method_b
File "b.py", line 2, in <module>
from c import method_c
File "c.py", line 2, in <module>
from a import method_a
ImportError: cannot import name method_a
简而言之,可以使用循环导入,但它们确实会造成一些极端情况。在没有实际看到您的代码的情况下,我猜这可能与此有关。
为了将来参考,如果您发布您正在使用的实际代码,您几乎总能得到更好的答案。