python包中的循环导入(又一次)和pylint发现的循环导入

问题描述 投票:0回答:0

我目前正在创建一个包,它工作正常,直到

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 上发现的不同场景,但(到目前为止我发现的)没有一个与我现在尝试做的完全一致。我该如何处理?

python python-import
© www.soinside.com 2019 - 2024. All rights reserved.