【发布时间】:2022-01-09 18:46:38
【问题描述】:
我正在努力解决循环导入问题。我的设置如下:
模块a.py:
import b
class A():
pass
模块b.py:
import a
class Bar(a.A):
pass
注意模块b中的循环导入:需要从模块a访问类A,因为B继承自A。
最后是主模块main.py:
import a
# ...
当我运行 main.py 时,我收到此错误:
$ python3 main.py
Traceback (most recent call last):
File "/home/.../main.py", line 1, in <module>
import a
File "/home/.../a.py", line 1, in <module>
import b
File "/home/.../b.py", line 3, in <module>
class Bar(a.A):
AttributeError: partially initialized module 'a' has no attribute 'A' (most likely due to a circular import)
我认为,解决循环导入的一种方法是不使用 from ... import ... 语句,正如您所见,我没有这样做。但是为什么我仍然会收到这个错误呢?
编辑:我当前的代码结构要求 A 和 B 是单独的模块。不过,在这个video中,他使用的是和我类似的结构,他没有问题……
【问题讨论】:
-
要问一个问题:为什么
a.py需要导入b?你能避免吗? -
@9769953 不,我无法避免,因为
a.py也可以访问来自b的内容 -
a.py不得import b。如果A需要来自B的东西,那么你的类/代码结构是错误的,那么可能将A和B放在同一个文件中。 -
然后创建第三个模块
c,在其中放置Bar的类定义。 -
但是如果 a 需要 b,b 需要 a,您可能希望首先重组您的模块(一个建议在上面的评论中)。
标签: python class circular-dependency