Python 3中的自引用类型的类型提示
Python 3中的自引用类型的类型提示
有没有一种方法可以在类中定义参数的类型,使得类型引用自身?\n例如,以下代码将无法运行:\n
from typing import List class Node: def __init__(self, val: int=0, neighbors: List[Node]=[]): self.val = val self.neighbors = neighbors
\n错误信息:\n
Traceback (most recent call last): File "node.py", line 3, inclass Node: File "node.py", line 4, in Node def __init__(self, val: int=0, neighbors: List[Node]=[]): NameError: name 'Node' is not defined
Python 3.7+引入了PEP 563: Postponed evaluation of annotations,提供了对自引用类型的支持。在Python 3.7+中,只需要在源文件的顶部添加from __future__ import annotations
,即可启用延迟注释评估功能,以提高代码运行速度(除非在像mypy
这样的分析器下运行,否则不会尝试评估注释)。
如果使用的是Python 3.7以下的版本,则只能使用旧的PEP 484前向引用方法,即使用字符串注释。例如:def __init__(self, val: int=0, neighbors: List['Node']=[]):
,注意在Node
周围加上引号,以推迟对类型的评估,假设该类型将在后面定义。
总结起来,Python 3.7+的解决方法是使用from __future__ import annotations
启用延迟注释评估功能,而在Python 3.7以下的版本中,需要使用字符串注释来解决自引用类型的问题。