Python 3.5+中的递归类型[重复]
Posted
技术标签:
【中文标题】Python 3.5+中的递归类型[重复]【英文标题】:Recursive Typing in Python 3.5+ [duplicate] 【发布时间】:2016-11-15 09:35:29 【问题描述】:在 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】:您可以使用 PEP 484 中定义的Forward References
这种情况经常发生的情况是定义 容器类,其中定义的类出现在签名中 的一些方法。例如,下面的代码(开始 一个简单的二叉树实现)不起作用:
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']:
【讨论】:
请注意,从 Python3.10 开始,这将不是必需的,并且可以通过from __future__ import annotations
选择性地避免,请参阅docs.python.org/3.8/library/__future__.html 底部的表格以上是关于Python 3.5+中的递归类型[重复]的主要内容,如果未能解决你的问题,请参考以下文章