好吧,我不明白,这个话题是老得要命,但我无法找到答案,我问特定问题。圆形进口和类字段python3
比方说,我们有一个非常简单的结构:两个文件,a.py
和b.py
,其内容是:
a.py
import b
class C:
lal = 4
class A:
kek = 12
lol = b.B()
b.py
import a
class B:
aa = a.C()
试图运行python b.py
,我们得到:
Traceback (most recent call last):
File "b.py", line 1, in <module>
import a
File ".../a.py", line 1, in <module>
import b
File ".../b.py", line 3, in <module>
class B:
File ".../a.py", line 5, in A
aa = a.C()
AttributeError: module 'a' has no attribute 'C'
但如果我们移动import b
线后的C
类,脚本启动,并产生没有错误。
我还没有发现这个任何提及任何在这里,所以任何答案。这里的问题是:为什么会出现这种情况和如何逃脱呢?
这是Django框架的一个特别重要的问题。当我有很多模型时,我会尝试将它们分成许多文件。在那里获得循环导入非常容易。
我不是很受这个领域的教育,但我相信答案在这里:https://docs.python.org/3/reference/import.html。我也建议使用“from module_x import class_y”而不是“import *”。它可以帮助我们避免这些问题。 –
在加载程序执行模块代码之前,模块将存在于sys.modules中。这是至关重要的,因为模块代码可能(直接或间接)导入自己;事先将它添加到sys.modules可以防止在最坏的情况下进行无限递归,并在最佳情况下多次加载。 –