想象一下以下项目结构
app/
foo/
__init__.py
a.py
b.py
Run Code Online (Sandbox Code Playgroud)
在a.py我有类甲至极使用类乙从b.py文件,和乙从类b.py使用甲类形式a.py
如果我写:
from foo.b import B
Run Code Online (Sandbox Code Playgroud)
在a.py和
from foo.a import A
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
如果涉及继承,它会变得更复杂一些.在这种情况下,您可能不希望超类知道子类,因为这会违反替换原则.
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |