1 回答

TA贡献1797条经验 获得超6个赞
自动生成的哈希方法不安全,因为它尝试对不可哈希的属性 、和 进行哈希处理。您需要定义自己的方法来忽略这些属性。一种可能性是signatureprimary_keyindexed__hash__
def __hash__(self):
return hash((self.name, self.primary_key))
两者和都是不可变的,因此包含这些值的元组也是不可变的,因此是可哈希的。self.nameself.primary_key
显式定义此方法的替代方法是使用该函数关闭可变字段以进行哈希处理。field
@dataclass(frozen=True, eq=True)
class Table:
name: str
signature: Dict[str, Type[DBType]] = field(compare=False)
prinmary_key: str
foreign_keys: Dict[str, Type[ForeignKey]] = field(compare=False)
indexed: List[str] = field(compare=False)
field具有一个参数,其默认值为 的值,并且文档不鼓励对 使用不同的值。(可能是为了确保相等的项目具有相同的哈希值。您不太可能真的想将这三个字段用于比较两个表,因此这应该没问题。hashcomparehash
我会查阅文档,而不是依靠我相对不知情的摘要。
添加回答
举报