nim*_*mda 13 python recursion type-hinting python-3.x
在Python 3.5中,添加了类型注释(参见此处).
有没有一种定义递归类型注释的方法,例如树状结构?
class Employee(object):
def __init__(self, name: str, reports: List[Employee]):
self.name = name
self.reports = reports
Run Code Online (Sandbox Code Playgroud)
在上面,似乎注释不起作用List[Employee].运行代码会导致此错误:
NameError: name 'Employee' is not defined
Bre*_*bel 22
您可以使用PEP 484中定义的前向参考
这种情况通常发生的情况是容器类的定义,其中定义的类出现在某些方法的签名中.例如,以下代码(简单二叉树实现的开始)不起作用:
Run Code Online (Sandbox Code Playgroud)class Tree: def __init__(self, left: Tree, right: Tree): self.left = left self.right = right为了解决这个问题,我们写道:
Run Code Online (Sandbox Code Playgroud)class Tree: def __init__(self, left: 'Tree', right: 'Tree'): self.left = left self.right = right允许使用字符串文字作为类型提示的一部分,例如:
Run Code Online (Sandbox Code Playgroud)class Tree: ... def leaves(self) -> List['Tree']: