gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:49 26 4
gpt4 key购买 nike

<分区>

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()有什么坑吗?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com