如何声明Python数据类成员字段与数据类类型相同

exi*_*guy 8 python python-3.x python-dataclasses

如何让数据类的成员字段与 python3.7+ 中的类名相同?我正在尝试定义一个像这样的类(可以用 Java 或 C++ 完成)——它可以用作 LinkedList 节点的类

@dataclass
class Node:
  val:str
  next:Node
  prev:Node
Run Code Online (Sandbox Code Playgroud)

然而,我得到的只是NameError: name 'Node' is not defined。在数据类中拥有自引用成员变量的正确方法应该是什么

Iai*_*ton 13

您需要将以下导入添加到您的文件中

from __future__ import annotations
Run Code Online (Sandbox Code Playgroud)

这使得延迟注释成为可能,这是PEP 563中提出的。延迟注释允许您引用尚未定义的类,在您的示例中,Node当您仍在其主体中时,该类尚未定义


obl*_*lex 8

另一种方法是使用TypeVar

from dataclasses import dataclass
from typing import TypeVar

Node = TypeVar("Node")

@dataclass
class Node:
  val:  str
  next: Node
  prev: Node
Run Code Online (Sandbox Code Playgroud)

这在处理类方法的注释时也很有用。