无法在包中导入课程

时间:2018-06-26 08:44:06

标签: python python-import

我有以下项目结构: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

在这种情况下进行进口的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您有一个循环导入-基本导入modulea会导入moduleb,后者会导入base。 Python不支持循环导入,因此从技术上讲它是行不通的,即使对于从技术上支持它们的语言来说,循环依赖仍然是一件很糟糕的事情。

您在这里的解决方案是在一个模块中重新组合相互依赖的对象(类,函数等)-请注意,Python不是Java,并且不需要“每个类一个模块”(它实际上甚至是Python中的反模式)-或将DefaultObject移到它自己的模块中。