Python 3.5 +

时间:2016-07-13 00:23:10

标签: python python-3.x recursion type-hinting

在Python 3.5中,添加了类型注释(请参阅here)。

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

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

1 个答案:

答案 0 :(得分:18)

您可以使用PEP 484中定义的Forward References

  

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

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']: