我有一张课桌:
@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'}
TypeError: unhashable type: 'dict'
我不明白出了什么问题
自动生成的哈希方法不安全,因为它尝试对不可损坏的属性
signature
、primary_key
和indexed
进行哈希。您需要定义自己的__hash__
方法来忽略这些属性。一种可能性是self.name
和self.primary_key
都是不可变的,因此包含这些值的元组也是不可变的,因此可以散列明确定义此方法的另一种方法是使用
field
函数关闭可变字段以进行散列field
有一个hash
参数,其默认值为compare
的值,文档不鼓励为hash
使用不同的值。(可能是为了确保相等的项以相同的方式散列。)您不太可能真的想使用这三个字段来比较两个表,所以您应该确定这一点我会查阅文档,而不是依赖于我对它的相对无知的总结
相关问题 更多 >
编程相关推荐