我有一个奇怪的问题,我是不是能找到答案都在互联网上(或者我不知道怎么问)。
我有模块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
但是 ,当我尝试导入和使用AAA级的模块BBB.py
from AAA import AAA
class BBB():
def __init__(self):
print 'BBB'
我得到以下错误
ImportError: cannot import name AAA
有什么建议么? 我不能在Python中创建循环依赖? 我使用的Python版本2.7.6在Ubuntu
事实上-如果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()
通过这种方式,两个模块之间的联系是“宽松”,而不是那么紧。
当你想在另一个使用模块,你必须导入它,所以使用import your_module
。 你必须键入your_module.foo()
如果你想使用一种方法里面。 随着指令from your_module import attr1, foo1, [...]
你正在修改的模块的全局变量,这样就可以使用attR1位或方法foo1,好像他们是你的模块中。 一个具体的例子是:如果你想使用的math
模块,键入import math
,当你想使用你键入常数pi math.pi
,但如果你确信不会有任何冲突与其他的名字,你” LL型from math import pi
和将要使用的常量pi
,如果你的模块中声明它。