如何从 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
导入某些东西,反之亦然,它不会按预期工作。
有两种方法可以解决:
相互导入模块。这样,它们都作为它们的命名空间存在,并将在导入过程中被填充。
所以只需执行 import BBB
并使用 BBB.BBB()
实例化 class:
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()
这样两个模块之间的 link 就 "looser" 而不是那么紧了。
我遇到了一个奇怪的问题,我无法在整个互联网上找到答案(或者我不知道如何提问)。
我有模块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
导入某些东西,反之亦然,它不会按预期工作。
有两种方法可以解决:
相互导入模块。这样,它们都作为它们的命名空间存在,并将在导入过程中被填充。
所以只需执行
import BBB
并使用BBB.BBB()
实例化 class: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()
这样两个模块之间的 link 就 "looser" 而不是那么紧了。