我在理解如何从子模块中从父模块导入类时遇到一些困难。我有以下目录结构:
module/
__init__.py (1)
common.py (containing testfunc and CommonClass)
submod/
__init__.py (2)
test.py (containing TestClass)
在(1)
我有:
from common import *
所以我可以直接做:
import module
module.testfunc()
在(2)
我有:
from test import TestClass
所以我可以在module
内完成:
import submod
class_inst = submod.TestClass()
现在在TestClass
(包含在test.py
中)我想使用CommonClass
的实例,所以我尝试先使用以下方法导入它:
from ..common import *
哪种方法正常,但当我尝试在CommonClass
中创建TestClass
的实例时:
class TestClass(object):
def __init__(self):
self.inst = CommonClass()
我收到错误:
NameError: global name 'CommonClass' is not defined
同样,如果我尝试from ..common import CommonClass
,我会收到错误:
ImportError: cannot import name CommonClass
据我所知,CommonClass
应该在test.py
内可见,所以我不确定为什么找不到它。我有一种感觉,我对__init__.py
的用法有所了解。是否有人可以指出我正在制造的任何明显错误?
答案 0 :(得分:1)
我想说“循环进口”但我无法确定它。你看到的ImportError可能就是这种情况的症状。通常,如果您导入的模块又导入了其他内容,并且导入链最终导入了启动所有导入的模块,那么您将获得ImportError。
您可以将CommonClass
移动到新模块module.submod.utils
中,该模块不会从您的代码中导入任何其他内容并从那里导入吗?