我目前正在创建一个包,它工作正常,直到
pylint
发现一些循环导入问题。我试图修复它们,最终想知道架构本身是否有意义,因为我做不到。
我简化了场景并提出了当前不起作用的解决方案:
.
|-- pack
| |-- __init__.py
| |-- pab
| | |-- __init__.py
| | |-- a.py
| | `-- b.py
| `-- pc
| |-- __init__.py
| `-- c.py
`-- setup.py
a.py
定义 A :
from pack import C
from .b import B
class A(C):
def __init__(self, b: B):
super().__init__()
self.b = b
b.py
定义 B :
from pack import C
from .a import A
class B(C):
def __init__(self, a: A):
super().__init__()
self.a = a
c.py
定义 C :
class C:
def __init__(self):
print("C")
如果我没有考虑到这两个限制条件,最终解决起来并不难:
pack/__init__.py
需要导入 A
和 B
因为我想最终使用这样的包:
import pack as p
a = p.A()
b = p.B()
第二个限制是它必须是 pylint 友好的。这意味着 pylint 迫使我们将导入放在文件之上。
此外,这里定义了 setup.py 作为要安装的包。
我已经尝试过在 stackoverflow 上发现的不同场景,但(到目前为止我发现的)没有一个与我现在尝试做的完全一致。我该如何处理?