包含初始化集的数据类?

dataclass containing initalized set?

我正在尝试使用数据class 来做某事,我需要在其中初始化一个空集,但我不知道该怎么做。在使用数据 class(只是常规的 class)之前,我的工作等效项是 self.children = set(),这对我的目的来说很好。我怎样才能在数据class?

中获得等价物

我需要它默认初始化,不必每次都作为参数传递。

from dataclasses import dataclass, field


@dataclass(unsafe_hash=True)
class Node:
    index: int
    name: str
    children: set = field(default_factory=set, hash=True)

尝试将项目添加到集合时出现错误。正在添加的项目是节点类型(上面的 class)。

    root.children.add(child)
  File "<string>", line 2, in __hash__
TypeError: unhashable type: 'set'

是:

children: set = field(default_factory=set)

默认的factory是一个函数,在初始化returns初始值的字段时将被调用。因此,传递它 set 而不调用它 ,这是一个函数,当调用时 returns 一个新的集合。您还必须为数据类添加 : set 类型注释以将其作为字段选取。