ホームページ >バックエンド開発 >Python チュートリアル >抽象基本クラスを使用して、小文字キーを持つ堅牢で柔軟な辞書サブクラスを作成するにはどうすればよいですか?
この記事では、さまざまなシナリオで理想的に動作する辞書のカスタマイズされたサブクラスを作成する方法を検討します。
私たちの目標は、キーが常に小文字である「dict」のサブクラス。この一見単純なタスクでは、特定のメソッドを慎重にオーバーライドする必要があります。
目的のキー動作を実現するには、「__getitem__」、「__setitem__」、および「 __delitem__ メソッド。これらのメソッドをカスタマイズすることで、キーの対話をインターセプトし、小文字の変換を強制できます。
「dict」を直接サブクラス化する代わりに、ABC (抽象基本クラス) を利用できます。 「collections.abc」モジュール。このアプローチは、よりクリーンで堅牢な実装を提供します。
「MutableMapping」ABC を実装することで、dict インターフェイスへの準拠を保証します。次のコード スニペットは、変換された辞書の最小限の実装を提供します。
from collections.abc import MutableMapping class TransformedDict(MutableMapping): def __init__(self, *args, **kwargs): self.store = dict() self.update(dict(*args, **kwargs)) 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」メソッドは、必要な変換をキーに適用する役割を果たします。私たちの場合、単にキーを小文字で返します:
def _keytransform(self, key): return key.lower()
変換された辞書を使用するには、'TransformedDict' をサブクラス化し、目的のキー変換を指定します。 「_keytransform」メソッド。例:
class MyTransformedDict(TransformedDict): def _keytransform(self, key): return key.lower() s = MyTransformedDict([('Test', 'test')]) assert s.get('TEST') is s['test'] # free get assert 'TeSt' in s # free __contains__
実装された 'TransformedDict' は、内部的に標準の dict に依存しているため、pickle で動作します。
次のことが重要です。 「dict」を直接サブクラス化することは、予期しない動作を引き起こす可能性があるため、一般的に推奨されないことに注意してください。 ABC を利用することで、目的のインターフェイス (この場合は 'MutableMapping') に準拠した堅牢で柔軟なサブクラスを作成できます。
以上が抽象基本クラスを使用して、小文字キーを持つ堅牢で柔軟な辞書サブクラスを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。