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

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

如何組合數據類、屬性和 lru_cache

如何組合數據類、屬性和 lru_cache

慕妹3146593 2022-04-23 17:12:27
我正在嘗試為一些計算科學代碼結合數據類、屬性和 lru_caches:from dataclasses import dataclassfrom typing import Anyfrom functools import lru_cache@dataclassclass F:    a: Any = 1    b: Any = 2    c: Any = 3    @property    @lru_cache(1)    def d(self):        print('Computing d')        return (self.a+self.b)**self.cf=F()print(f.d)print(f.d)我希望看到Computing d2727但得到TypeError: unhashable type: 'F'有沒有辦法解決這個問題?
查看完整描述

1 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

lru_cache就像記憶一樣,它對傳遞給函數的參數進行哈希處理并存儲結果。您的課程不可散列。要使其可散列,請添加類似這樣的內容

class F:
    ....
    def __hash__(self):
            return hash((self.a, self.b, self.c))

這樣做的原因是這 3 個屬性使每個實例“唯一”——我們不需要對方法進行散列,因為所有實例都具有相同的方法。

在大多數普通類上,它__dict__用于一般散列,除非__hash__找到方法。數據類文檔解釋說數據類可以生成散列方法,但這取決于您如何設置數據類,因為默認情況下假定對象是可變的(并且不能對列表等可變對象進行散列)。

數據類文檔指出,如果參數eqfrozen設置為True裝飾時將生成一個哈希方法@dataclass(),但您的應用程序可能不保證這一點,因為frozen禁止對實例進行屬性分配。

https://docs.python.org/3/library/dataclasses.html#dataclasses.dataclass


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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