如何从 class 包含的 class 导入 class

How to import class from class included by that class

我遇到了一个奇怪的问题,我无法在整个互联网上找到答案(或者我不知道如何提问)。

我有模块AAA.py

from BBB import BBB
class AAA():
    def test(self):
        print 'AAAA'
        a = BBB()

和模块BBB.py

class BBB():
    def __init__(self):
        print 'BBB'

然后当我打电话时

a = AAA()
a.test()

一切正常,我看到了输出

AAAA
BBB

BUT 当我尝试从模块 BBB.py[=19= 导入和使用 class AAA ]

from AAA import AAA
class BBB():
    def __init__(self):
        print 'BBB'

我收到以下错误

ImportError: cannot import name AAA

有什么建议吗?我不能在 Python 中创建循环依赖?我在 Ubuntu

上使用版本 Python 2.7.6

当你想在另一个模块中使用一个模块时,你必须导入它,所以使用 import your_module。如果你想在其中使用一个方法,你必须输入 your_module.foo()。使用指令 from your_module import attr1, foo1, [...],您正在修改模块的全局变量,以便您可以使用 attr1 或方法 foo1,就像它们在您的模块中一样。 一个具体的例子是:如果你想使用math模块,你输入import math,当你想使用常量pi时,你输入math.pi,但如果你确定会有与其他名称不冲突,您将键入 from math import pi 并且您将使用常量 pi 就像您在模块中声明它一样。

确实 - 如果 AAA.py 在顶层从 BBB.py 导入某些东西,反之亦然,它不会按预期工作。

有两种方法可以解决:

  1. 相互导入模块。这样,它们都作为它们的命名空间存在,并将在导入过程中被填充。

    所以只需执行 import BBB 并使用 BBB.BBB() 实例化 class:

    import BBB
    class AAA():
        def test(self):
            print 'AAAA'
            a = BBB.BBB()
    
  2. 在需要的地方进行导入:

    class AAA():
        def test(self):
            from BBB import BBB
            print 'AAAA'
            a = BBB()
    

    这样两个模块之间的 link 就 "looser" 而不是那么紧了。