具有循环依赖项的类型提示

时间:2018-07-26 19:12:50

标签: python class circular-dependency type-hinting

我有两个带有方法的类,每个方法都将各自其他类的对象作为参数。现在,我想在方法上使用python type hints (PEP 484),这将导致以下代码:

class A:
    def do(self, b: B) -> None:
        pass

class B:
    def do(self, a: A) -> None:
        pass

这将失败,因为尚未定义的第一次出现B。该僵局如何解决?

1 个答案:

答案 0 :(得分:0)

要在这种情况下打破局限,必须将类型的分析延迟到模块初始分析之后的某个时间。对于这种情况,类型提示使您可以用引号将类型引起来:

class A:
    def do(self, b: 'B') -> None:
        pass

class B:
    def do(self, a: A) -> None:
        pass

通过使用引号,可以对文档进行初始解析,而不会出现问题,而可以在需要时评估引号中的类型信息,例如通过类型检查器。来自PEP 484, Forward references

  

当类型提示包含尚未定义的名称时,该定义可以表示为字符串文字,以便稍后解析。