很抱歉,如果这是一个菜鸟问题,但我尝试了谷歌,但没有帮助。假设我有两个类,A 和 B。我希望 A 将 B 的实例作为参数。同样,我希望 B 获取 A 的实例。如果我在不同的模块中定义我的类并希望对我的类进行类型检查,我必须将 B 导入到包含 A 的模块,反之亦然,这将使我到圆形导入。我该怎么办?有没有办法在实际定义这些类之前声明它们的存在,这样我就可以在 init 函数中引用它们?
我尝试在同一个模块中定义所有类,这可行,但这违背了项目组织的目的。
最佳答案
如果可能,最好完全避免循环性质。实现此目的的一种方法是使用抽象基类来实现重要功能,或者您也可以使用协议(protocol)来实现此目的。
假设我们有这两个类:
class A:
def __init__(self) -> None:
self.a_property = "a"
def action(self, b: B) -> None:
print(b.b_property)
class B:
def __init__(self) -> None:
self.b_property = "b"
def action(self, a: A) -> None:
print(a.a_property)
这有一个明显的循环。如果我们将重要组件抽象为协议(protocol),那么我们就可以避免这个循环:
from typing import Protocol
class AProtocol(Protocol):
a_property: str
class BProtocol(Protocol):
b_property: str
class A:
def __init__(self) -> None:
self.a_property = "a"
def action(self, b: BProtocol) -> None:
print(b.b_property)
class B:
def __init__(self) -> None:
self.b_property = "b"
def action(self, a: AProtocol) -> None:
print(a.a_property)
关于python - 相互引用类的类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75633665/