你好,我有一个 __dataclass__ 对象,它的一个属性/域是一个 list。这使其成为 “不可哈希”(因为 list 是 “可变的”),所以我无法将我的 dataclass 中的实例放入一个 set 中。

但是,这个 dataclass 有一个 id 字段,这个字段来自数据库 (等同于一个主键)。因此,我可以使用它使我的 dataclass “可哈希”:

from dataclasses import dataclass

@dataclass
class MyClass:
    id: str
    a_collection: list[str]
    another_field: int

    def __hash__(self) -> int:
        return hash(self.id)

这有效,但是是正确的方法吗?

通常情况下,建议始终实现 __eq__()__hash__() 方法,但我看不到需要……。“同构规则”规定相同的对象必须具有匹配的哈希码,并且这条规则仍然得到满足。

当然,我不想使用 unsafe_hash=True……