基本上我有循环依赖的问题,我无法更改为我正在使用的代码的类结构(请不要建议更改类结构)。
现在我可以把我所有的代码放到一个巨大的文件中,但这似乎不切实际。
那么我的所有类是否有可能位于同一个命名空间中,因此可以:
文件 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.")
没有蟒蛇自己爆炸。
如果您无法更改文件结构和/或类层次结构,则可以将导入行移动到它们最终不会相互导入的位置。 它们会被执行很多次,但如果你不介意它对性能的影响,你可以将import
行移动到foo
定义内部,例如
class A:
def foo(self):
from b import B
B().bar()
以及B
侧的模拟。
也许重构是更好的方法,或者使用限定名称,如@RonaldOussoren在他的答案中所示。
有两个模块共享同一个命名空间。在您的示例中,您可以做的是使用 import a
而不是 from a import A
然后将类引用为 a.A
(对于另一个模块中的类 B 也是如此)。