在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
答案 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']: