如何从该类包含类进口类(How to import class from class include

2019-10-23 21:09发布

我有一个奇怪的问题,我是不是能找到答案都在互联网上(或者我不知道怎么问)。

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

Answer 1:

事实上-如果AAA.py从进口的东西BBB.py在顶层,反之亦然,它并不像预期的那样。

有两种方法可以解决这个问题:

  1. 导入彼此模块。 这样,他们都存在自己的命名空间,在导入过程中会被填满。

    所以,只是import BBB和使用BBB.BBB()实例化类:

     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() 

    通过这种方式,两个模块之间的联系是“宽松”,而不是那么紧。



Answer 2:

当你想在另一个使用模块,你必须导入它,所以使用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 ,如果你的模块中声明它。



文章来源: How to import class from class included by that class