【问题标题】:Recursive Typing in Python 3.5+ [duplicate]Python 3.5+中的递归类型[重复]
【发布时间】: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

【问题讨论】:

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


    【解决方案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']:
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 2017-03-07
    • 2020-11-30
    • 1970-01-01
    • 2019-01-18
    • 2019-11-14
    相关资源
    最近更新 更多