包含初始化集的数据类?

问题描述 投票:0回答:1

我正在尝试将数据类用于某些东西,在其中我需要初始化一个空集,但是我在弄清楚如何做到这一点时遇到了麻烦。在使用数据类(仅是常规类)之前,我的工作等效项为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'
python python-3.x set python-3.7 python-dataclasses
1个回答
2
投票

是:

children: set = field(default_factory=set)

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

© www.soinside.com 2019 - 2024. All rights reserved.