基本上我有循环依赖的问题,我不能改变我正在使用的代码的类结构(请不要建议改变类结构)。
现在我可以将所有代码放入一个巨大的文件中,但这似乎不切实际。
所以我的所有类都可能存在于同一名称空间中,因此这是可能的:
档案a.py:
from b import B
class A:
def foo(self):
B().bar()
def bar(self):
print("Hello, this is A")
文件b.py:
from a import A
class B:
def foo(self):
A().bar()
def bar(self):
print("Hello, this is B.")
没有python爆炸本身。
答案 0 :(得分:2)
如果您无法更改文件结构和/或类层次结构,则可以将导入行移至他们不会相互导入的位置。他们会被执行多次,但是如果您不注意性能影响,可以将import
行移到foo
定义内,如
class A:
def foo(self):
from b import B
B().bar()
和B
侧的模拟。
可能重构是更好的方法,或者使用@RonaldOussoren在他的回答中显示的限定名称。
答案 1 :(得分:1)
不可能有两个共享相同命名空间的模块。您在示例中可以执行的操作是使用import a
而不是from a import A
,然后将该类引用为a.A
(对于其他模块中的B类也是如此)。