我正在尝试将数据类用于某些东西,在其中我需要初始化一个空集,但是我在弄清楚如何做到这一点时遇到了麻烦。在使用数据类(仅是常规类)之前,我的工作等效项为self.children = set()
,这对我来说很好。如何获得数据类中的等效项?
我需要默认将其初始化,而不必每次都作为参数传递。
from dataclasses import dataclass, field
@dataclass(unsafe_hash=True)
class Node:
index: int
name: str
children: set = field(default_factory=set, hash=True)
尝试将项目添加到集合时出现错误。要添加的项目的类型为Node(上面的类)。
root.children.add(child)
File "<string>", line 2, in __hash__
TypeError: unhashable type: 'set'
是:
children: set = field(default_factory=set)
默认factory是function,将在初始化返回初始值的字段时调用。因此,将其传递给set
不调用它,这是一个在调用时返回新集合的函数。您还必须为数据类添加: set
类型注释,以将其作为字段。