我有这个数据类:
from dataclasses import dataclass, field
from typing import List
@dataclass
class Person:
name: str
dob: str
friends: List['Person'] = field(default_factory=list, init=False)
name
and dob
是不可变的并且friends
是可变的。我想生成每个人对象的哈希值。我可以以某种方式指定要包含和排除哪个字段来生成__hash__
方法?在这种情况下,name
and dob
应包含在生成哈希值中并且friends
不应该。这是我的尝试,但没有成功
@dataclass
class Person:
name: str = field(hash=True)
dob: str = field(hash=True)
friends: List['Person'] = field(default_factory=list, init=False, hash=False)
>>> hash(Person("Mike", "01/01/1900"))
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
hash(Person("Mike", "01/01/1900"))
TypeError: unhashable type: 'Person'
我也找不到设置方法name
and dob
被冻结。我会避免设置unsafe_hash
to True
,仅从声音来看。有什么建议么?
另外,我正在做的事情被认为是好的做法吗?如果没有,你能建议一些替代方案吗?
谢谢
编辑:这只是一个玩具示例,我们可以假设 name 和 dob 字段是唯一的。
编辑:我举了一个例子来演示该错误。