Python 3的类型提示中的自引用类型

时间:2019-09-26 00:27:48

标签: python python-3.x

是否可以在类中定义参数的类型,以使该类型引用自身?

例如,以下命令将不会运行:

div.listing

错误:

from typing import List

class Node:
    def __init__(self, val: int=0, neighbors: List[Node]=[]):
        self.val = val
        self.neighbors = neighbors

1 个答案:

答案 0 :(得分:0)

这里最好的解决方案是使用Python 3.7+,它增加了对PEP 563: Postponed evaluation of annotations的支持。在这种情况下,您需要做的只是添加:

from __future__ import annotations

位于源文件的顶部,从而可以进行延迟的注释评估(通过甚至不尝试评估注释(除非在诸如mypy之类的分析器下运行,才能使代码运行更快)。

如果没有3.7+版本,您将受制于使用字符串注释的旧PEP 484 forward references approach

def __init__(self, val: int=0, neighbors: List['Node']=[]):

请注意Node周围的引号,这会在稍后定义类型的假设下推迟对类型的求值。