27

在 Python 3.5 中,添加了类型注释(参见此处)。

有没有定义递归类型注释的方法,例如树状结构?

class Employee(object):
    def __init__(self, name: str, reports: List[Employee]):
       self.name = name
       self.reports = reports

在上面,注释似乎不起作用List[Employee]。运行代码会导致此错误:

NameError: name 'Employee' is not defined

4

1 回答 1

47

您可以使用PEP 484 中定义的前向引用

这种情况经常发生的情况是定义容器类,其中被定义的类出现在某些方法的签名中。例如,以下代码(简单二叉树实现的开始)不起作用:

class Tree:
    def __init__(self, left: Tree, right: Tree):
        self.left = left
        self.right = right

为了解决这个问题,我们写道:

class Tree:
    def __init__(self, left: 'Tree', right: 'Tree'):
        self.left = left
        self.right = right

允许使用字符串文字作为类型提示的一部分,例如:

class Tree:
    ...
    def leaves(self) -> List['Tree']:
于 2016-07-13T01:13:55.387 回答