4

想象一下下面的项目结构

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中,递归发生

如何正确导入,而不将AB合并到单个文件中

4

1 回答 1

5

Python 不支持循环导入,部分原因是它们通常是设计缺陷的征兆。

您可以做的是制作AB自包含并从第三个文件中引用它们,或者,将共享结构提取到第三个文件中并从您的两个模块中引用它。这在很大程度上取决于什么AB是什么以及为什么你认为他们应该相互了解。

例如,您可以A只通过其构造函数引用一个实例B,这样您就不需要导入:

class A(object):
    def __init__(self, b):
        self.b = b
    # .. some methods that reference self.b

如果涉及继承,它会变得有点复杂。在这种情况下,您可能不希望超类知道子类,因为这会违反替换原则

于 2012-09-24T20:54:44.453 回答