无法在包内导入 class

Unable to import class within package

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

在这种情况下导入的正确方法是什么?

你有一个循环导入 - base imports modula 导入 moduleb 导入 base。 Python 不支持循环导入,因此它在技术上无法工作,即使对于技术上支持它们的语言,循环依赖无论如何也是一件非常糟糕的事情。

您的解决方案是在同一个模块中重新组合相互依赖的对象(类、函数等)- 请注意 Python 不是 Java 并且不需要 "one module per class"(它甚至实际上是 Python 中的反模式)- 或者将 DefaultObject 移动到它自己的模块。