Skip to main content
 首页 » 编程设计

python之使用 reload() 打破导入循环

2025年05月04日8cloudgamer

<分区>

Possible Duplicate:
Circular (or cyclic) imports in Python

a.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 中的“导入 b”行,然后在导入 b 时尝试访问尚未创建的“a.Abstract”。

不过,如果我包含 reload 语句,我可以很好地“导入 a”,因为 Python 跳回到 a.py 模块并在继续 b.py 之前创建抽象类。所以它似乎有效(尽管我可能应该在重新加载之前添加一个 hasattr 检查)。

我一直在寻找解决此导入循环问题的方法,但没有看到任何与此相关的建议。这样使用reload()有什么坑吗?