亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

錯誤:不可哈希類型:帶有@dataclass的“dict”

錯誤:不可哈希類型:帶有@dataclass的“dict”

森林海 2022-08-02 15:49:50
我有一個類表:@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'}類型錯誤:不可哈希類型:“字典”不明白問題出在哪里。
查看完整描述

1 回答

?
FFIVE

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


我會查閱文檔,而不是依靠我相對不知情的摘要。


查看完整回答
反對 回復 2022-08-02
  • 1 回答
  • 0 關注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號