我有以下项目结构:1
这是文件的内容:
# run.py
from module.submodule.base import DefaultObject
d = DefaultObject()
# module/sumbodule/base.py
from module.submodule.modulea import A
class BaseObject(object):
pass
class DefaultObject(BaseObject):
def return_something(self):
return A()
# module/submodule/modulea.py
from module.submodule.moduleb import B
class A(object):
def return_something(self):
return B()
# module/submodule/moduleb.py
from module.submodule.base import BaseObject
class B(BaseObject):
pass
当我尝试运行python3 run.py
时,我得到ImportError: cannot import name 'BaseObject
我不明白为什么我可以在class B
中导入modulea.py
,但不能在class BaseObject
中导入moduleb.py
在这种情况下进行进口的正确方法是什么?
答案 0 :(得分:0)
您有一个循环导入-基本导入modulea会导入moduleb,后者会导入base。 Python不支持循环导入,因此从技术上讲它是行不通的,即使对于从技术上支持它们的语言来说,循环依赖仍然是一件很糟糕的事情。
您在这里的解决方案是在一个模块中重新组合相互依赖的对象(类,函数等)-请注意,Python不是Java,并且不需要“每个类一个模块”(它实际上甚至是Python中的反模式)-或将DefaultObject
移到它自己的模块中。