【发布时间】:2017-06-20 03:24:46
【问题描述】:
我的代码有点复杂,所以我举个例子:
文件 A.py:
from B import B
class A():
def __init__(self):
self.id = 5
self.b = B()
文件 B.py
from A import A
class B():
def __init__(self):
self.id = 15
self.a = A()
这是我得到的例外:
Traceback (most recent call last):
File "F:/Project/Code/A.py", line 1, in <module>
from B import B
File "F:\Project\Code\B.py", line 1, in <module>
from A import A
File "F:\Project\Code\A.py", line 1, in <module>
from B import B
ImportError: cannot import name B
我想要的只是 A 包含 B 的实例,B 包含 A 的实例。我知道我所要做的就是将它们转换为单个文件,但我不想这样做,我的代码是在更大的范围内,我的老师强迫我保留多个短脚本而不是一个长代码。
任何建议将不胜感激。
【问题讨论】:
-
“我想要的只是 A 包含 B 的实例和 B 包含 A 的实例” - 即使您解决了循环导入问题,这仍然是一个根本性的设计。一个 A 包含一个 B,另一个 A 包含另一个 B,等等。创建其中一个对象需要您创建无限数量的对象。
-
我想他可以以某种方式指定最大创建递归深度,但这是一个相当沉重的元主题
-
作为解决文字问题的骗局关闭:ImportError。至于能够在反对创建时以不会导致无限递归的方式设置交叉引用(假设可以为包含的对象的成员重用
A和B的实例),那需要一个单独的问题。
标签: python oop scripting importerror