无法在包内导入 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
移动到它自己的模块。
我有以下项目结构: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
移动到它自己的模块。