完美重寫字典:使用抽象基底類別的指南
建立內建dict類型的子類別時,實現完美的實作可能具有挑戰性。不要覆寫整個 dict 類,請考慮採用另一種方法,使用 collections.abc 模組中的抽象基底類別 (ABC)。
使用 MutableMapping 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
此實作為透過 _keytransform 方法操作鍵提供了基礎。透過在子類別中重寫此方法,您可以將自訂轉換套用至鍵。
使用ABC 的好處
實現MutableMapping 接口有幾個優點:
示例用法
建立TransformedDict 的子類別並定義_keytransform方法讓您可以自訂鍵處理:
class MyTransformedDict(TransformedDict): def _keytransform(self, key): return key.lower() s = MyTransformedDict([('Test', 'test')]) assert s.get('TEST') is s['test'] assert 'TeSt' in s
這個子類別允許不區分大小寫的密鑰存取和
附加說明
以上是抽象基底類別如何幫助完美重寫字典的行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!