可能重复:
Python 中的循环(或循环)导入
一个.py
import b
class Abstract(object):
pass
class Concrete(Abstract):
def get_newthing(self):
return b.NewThing()
(注意:我很难对 a.py 进行任何重大的重构)
b.py
import a
#reload(a)
class NewThing(a.Abstract):
pass
如所写,运行“import b, a”有效,但运行“import a”给出
AttributeError: 'module' object has no attribute 'Abstract'
当 Python 到达 a.py 中的“import b”行,然后在导入 b 时尝试访问尚未创建的“a.Abstract”。
但是,如果我包含 reload 语句,我可以很好地执行“import a”,因为 Python 会跳回 a.py 模块并在继续 b.py 之前创建 Abstract 类。所以它似乎有效(尽管我可能应该在重新加载之前添加一个 hasattr 检查)。
我一直在寻找解决此导入循环问题的方法,但没有看到任何关于这些方面的建议。以这种方式使用 reload() 有什么陷阱吗?