辞書の完全なオーバーライド: 抽象基本クラスを使用したガイド
組み込み辞書型のサブクラスを作成する場合、完璧な導入は困難な場合があります。 dict クラス全体をオーバーライドする代わりに、collections.abc モジュールの抽象基本クラス (ABC) を使用する代替アプローチを採用することを検討してください。
MutableMapping ABC の使用
The MutableMapping ABC は、変更可能な辞書のように動作するクラスのインターフェイスを提供します。このインターフェイスを実装すると、直接サブクラス化せずに、dict のように動作するオブジェクトを作成できます。最小限の例を次に示します。
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
このサブクラスにより、大文字と小文字を区別しないキーアクセスが可能になり、 retrieval.
追加メモ
以上が抽象基本クラスは辞書の動作を完全にオーバーライドするのにどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。