【问题标题】:How to declare python dataclass member field same as the dataclass type如何声明与数据类类型相同的python数据类成员字段
【发布时间】:2020-10-12 17:57:51
【问题描述】:
如何让数据类的成员字段与 python3.7+ 中的类名相同?
我正在尝试定义一个这样的类(可以在 Java 或 C++ 中完成)——它可以用作 LinkedList 节点的类
@dataclass
class Node:
val:str
next:Node
prev:Node
但是,我得到的只是NameError: name 'Node' is not defined。在数据类中拥有自引用成员变量的正确方法应该是什么
【问题讨论】:
标签:
python
python-3.x
python-dataclasses
【解决方案1】:
您需要将以下导入添加到您的文件中
from __future__ import annotations
这会启用延迟注释,这是在 PEP 563 中提出的。延迟注释允许您引用尚未定义的类,在您的示例中,Node 类在您仍在其主体中时未定义
【解决方案2】:
另一种方法是使用TypeVar:
from dataclasses import dataclass
from typing import TypeVar
Node = TypeVar("Node")
@dataclass
class Node:
val: str
next: Node
prev: Node
这在处理类方法的注解时也很有用。