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

How to declare python dataclass member field same as the dataclass type

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

的 class
@dataclass
class Node:
  val:str
  next:Node
  prev:Node

然而,我得到的只是NameError: name 'Node' is not defined。在 dataclasses

中拥有自引用成员变量的正确方法应该是什么

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

from __future__ import annotations

这会启用 PEP 563 中提出的延迟注释。延迟注释允许您引用尚未定义的 class,在您的示例中,当您仍在其正文中时 Node class 未定义

另一种方法是使用 TypeVar:

from dataclasses import dataclass
from typing import TypeVar

Node = TypeVar("Node")

@dataclass
class Node:
  val:  str
  next: Node
  prev: Node

这在处理 class.

方法的注解时也很有用