假设我在 python3 中有一个数据类。我希望能够散列和排序这些对象。
我只希望他们在 id 上排序/散列。
我在文档中看到我可以实现 _ hash _ 和所有这些,但我想让 datacalsses 为我完成工作,因为它们旨在处理这个问题。
from dataclasses import dataclass, field
@dataclass(eq=True, order=True)
class Category:
id: str = field(compare=True)
name: str = field(default="set this in post_init", compare=False)
a = sorted(list(set([ Category(id='x'), Category(id='y')])))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'Category'
原文由 Brian C. 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 文档:
由于您设置了
eq=True
并在默认情况下保留了frozen
(False
),因此您的数据类是不可散列的。您有 3 个选择:
frozen=True
(除了eq=True
之外),这将使您的类不可变且可散列。unsafe_hash=True
,这将创建一个__hash__
方法,但让你的类可变,因此如果你的类的实例在存储在字典或集合中时被修改,就会有问题:__hash__
方法。