无法在包中导入类

2024-10-02 22:29:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在这种情况下,什么是正确的进口方式


Tags: runfrompyimportbasereturnobjectpass
1条回答
网友
1楼 · 发布于 2024-10-02 22:29:39

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

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

相关问题 更多 >