具有循环依赖关系的类型提示

2024-04-24 14:21:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个类,每个类都有一个方法,每个类都以另一个类的对象作为参数。现在我想在方法上使用pythontype hints (PEP 484),这将产生以下代码:

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

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

这将失败,因为第一次出现B时,它还没有定义。如何解决这种僵局?在


Tags: 对象方法代码selfnone参数定义def
1条回答
网友
1楼 · 发布于 2024-04-24 14:21:50

要在这种情况下打破这种联系,您必须将类型的解析延迟到模块的初始解析之后一段时间。对于这种情况,类型提示可以将类型括在引号中:

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

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

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

When a type hint contains names that have not been defined yet, that definition may be expressed as a string literal, to be resolved later.

相关问题 更多 >