【问题标题】:Self referring types in Python 3's type hint [duplicate]Python 3 类型提示中的自引用类型 [重复]
【发布时间】:2020-01-26 05:12:40
【问题描述】:

有没有办法在类中定义参数的类型,以便该类型引用自身?

例如,以下将不会运行:

from typing import List

class Node:
    def __init__(self, val: int=0, neighbors: List[Node]=[]):
        self.val = val
        self.neighbors = neighbors

错误:

Traceback (most recent call last):
  File "node.py", line 3, in <module>
    class Node:
  File "node.py", line 4, in Node
    def __init__(self, val: int=0, neighbors: List[Node]=[]):
NameError: name 'Node' is not defined

【问题讨论】:

  • 始终对所有与 python 相关的问题使用通用 [python] 标签

标签: python python-3.x


【解决方案1】:

这里最好的解决方案是使用 Python 3.7+,它增加了对PEP 563: Postponed evaluation of annotations 的支持。在这种情况下,您需要做的就是添加:

from __future__ import annotations

到源文件的顶部,这将启用延迟注释评估(通过甚至不尝试评估注释来使您的代码运行得更快,除非在像 mypy 这样的分析器下运行)。

如果没有 3.7+,你会被旧的PEP 484 forward references approach 使用字符串注释:

def __init__(self, val: int=0, neighbors: List['Node']=[]):

注意Node 周围的引号,它会延迟类型的评估,假设它稍后会定义。

【讨论】:

    猜你喜欢
    • 2019-05-10
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2013-10-12
    • 2020-01-26
    • 2017-04-29
    相关资源
    最近更新 更多