想象一下下面的项目结构
app/
foo/
__init__.py
a.py
b.py
在a.py 中,我的A类使用b.py文件中的B类,而b.py中的B类使用A类形式a.py
如果我写:
from foo.b import B
在a.py和
from foo.a import A
在b.py中,递归发生
如何正确导入,而不将A和B合并到单个文件中
想象一下下面的项目结构
app/
foo/
__init__.py
a.py
b.py
在a.py 中,我的A类使用b.py文件中的B类,而b.py中的B类使用A类形式a.py
如果我写:
from foo.b import B
在a.py和
from foo.a import A
在b.py中,递归发生
如何正确导入,而不将A和B合并到单个文件中
Python 不支持循环导入,部分原因是它们通常是设计缺陷的征兆。
您可以做的是制作A
和B
自包含并从第三个文件中引用它们,或者,将共享结构提取到第三个文件中并从您的两个模块中引用它。这在很大程度上取决于什么A
和B
是什么以及为什么你认为他们应该相互了解。
例如,您可以A
只通过其构造函数引用一个实例B
,这样您就不需要导入:
class A(object):
def __init__(self, b):
self.b = b
# .. some methods that reference self.b
如果涉及继承,它会变得有点复杂。在这种情况下,您可能不希望超类知道子类,因为这会违反替换原则。