我遇到一个奇怪的问题,就是我无法在整个互联网上找到答案(或者我不知道该怎么问)。

我有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


但是,当我尝试从模块BBB.py导入并使用AAA类时

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


我收到以下错误

ImportError: cannot import name AAA


有什么建议么?我无法在Python中创建循环依赖项吗?我在Ubuntu上使用Python 2.7.6版本

最佳答案

确实-如果AAA.py从顶级BBB.py导入某些内容,反之亦然,则它无法按预期工作。

有两种解决方法:


相互导入模块。这样,它们都作为名称空间出现,并将在导入过程中填充。

因此,只需执行import BBB并使用BBB.BBB()实例化该类:

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

在需要的地方进行导入:

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


这样,两个模块之间的链接就变得“松散”了,而且没有那么紧密。

10-05 18:21