猿问

错误:不可哈希类型:带有@dataclass的“dict”

我有一个类表:


@dataclass(frozen=True, eq=True)

class Table:

    name: str

    signature: Dict[str, Type[DBType]]

    prinmary_key: str

    foreign_keys: Dict[str, Type[ForeignKey]]

    indexed: List[str]

并且需要创建这样的字典:



table = Table(*args)

{table: 'id'}

类型错误:不可哈希类型:“字典”


不明白问题出在哪里。


森林海
浏览 136回答 1
1回答

FFIVE

自动生成的哈希方法不安全,因为它尝试对不可哈希的属性 、和 进行哈希处理。您需要定义自己的方法来忽略这些属性。一种可能性是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我会查阅文档,而不是依靠我相对不知情的摘要。
随时随地看视频慕课网APP

相关分类

Python
我要回答