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

时间:2016-02-02 14:10:24

标签: python python-3.x

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

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

所以我的所有类都可能存在于同一名称空间中,因此这是可能的:

档案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爆炸本身。

2 个答案:

答案 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类也是如此)。