[英]Error: unhashable type: 'dict' with @dataclass
我有一個班級表:
@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'}
類型錯誤:不可散列的類型:'dict'
不明白有什么問題。
自動生成的散列方法並不安全,因為它試圖散列不可散列的屬性signature
、 primary_key
和indexed
。 您需要定義自己的__hash__
方法來忽略這些屬性。 一種可能性是
def __hash__(self):
return hash((self.name, self.primary_key))
self.name
和self.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
有一個hash
參數,其默認值是compare
的值,文檔不鼓勵對hash
使用不同的值。 (可能是為了確保相同的項目散列相同。)您不太可能真的想使用這三個字段來比較兩個表,所以您應該可以。
我會查閱文檔,而不是依賴於我相對不知情的總結。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.