我有以下项目结构: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
我不明白为什么我能在modulea.py
中导入class B
,但我不能在moduleb.py
中导入class BaseObject
在这种情况下,什么是正确的进口方式
您有一个循环import-base imports modulea导入moduleb导入base。Python不支持循环导入,因此在技术上无法工作,即使对于技术上支持循环导入的语言,循环依赖也是一件非常糟糕的事情
这里的解决方案要么是在同一个模块中重新组合相互依赖的对象(类、函数等)——注意Python不是Java,不需要“每个类一个模块”(它甚至实际上是Python中的反模式)——要么将
DefaultObject
移到它自己的模块中相关问题 更多 >
编程相关推荐