是否可以在多个文件之间共享命名空间



基本上我有循环依赖的问题,我无法更改为我正在使用的代码的类结构(请不要建议更改类结构)。

现在我可以把我所有的代码放到一个巨大的文件中,但这似乎不切实际。

那么我的所有类是否有可能位于同一个命名空间中,因此可以:

文件 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 也是如此)。

最新更新