首頁 > 後端開發 > Python教學 > 如何完善我的'dict”子類別以實現高效的密鑰處理和酸洗?

如何完善我的'dict”子類別以實現高效的密鑰處理和酸洗?

Susan Sarandon
發布: 2024-11-19 16:07:02
原創
341 人瀏覽過

How Can I Perfect My `dict` Subclass for Efficient Key Handling and Pickling?

完善dict 子類重寫

簡介

要創建一個完美的dict 子類,必須考慮關鍵細微差別、pickling 效果和高效的方法重寫。本文提供了實現此目標的綜合方法。

重寫注意事項

  • 密鑰處理:要實現小寫密鑰,請重寫__getitem__ 和__setitem__ 來轉換密鑰之前訪問字典。若要啟用 get,請重寫 __setitem__ 來處理鍵強制。
  • Pickling: 是的,子類化 dict 會影響 pickling。為了確保相容性,請實作 __setstate__、__getstate__ 和 __reduce__。
  • 必要方法: 重寫 __repr__、update 和 __init__ 等基本方法以獲得完整功能。

使用 MutableMapping

而不是直接子類化 dict,請考慮使用 collections.abc 模組中的 MutableMapping 抽象基底類別 (ABC)。它提供了一個包含所需方法的模板,並有助於防止遺失實作。

程式碼範例

from collections.abc import MutableMapping

class TransformedDict(MutableMapping):
    def __init__(self, *args, **kwargs):
        self.store = dict()
        self.update(dict(*args, **kwargs))  # use the free update to set keys

    def __getitem__(self, key):
        return self.store[self._keytransform(key)]

    def __setitem__(self, key, value):
        self.store[self._keytransform(key)] = value

    def __delitem__(self, key):
        del self.store[self._keytransform(key)]

    def __iter__(self):
        return iter(self.store)

    def __len__(self):
        return len(self.store)

    def _keytransform(self, key):
        return key

class lcdict(TransformedDict):

    def _keytransform(self, key):
        return key.lower()
登入後複製

TransformedDict 的這個子類別實現了所需的小寫鍵功能:

s = lcdict([('Test', 'test')])

assert s.get('TEST') is s['test']
assert 'TeSt' in s
登入後複製

結論

以上是如何完善我的'dict”子類別以實現高效的密鑰處理和酸洗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板