例として、サブクラスdictを作成し、すべてのキーを大文字にしたいとします。
class capdict(dict):
def __init__(self,*args,**kwds):
super().__init__(*args,**kwds)
mod = [(k.capitalize(),v) for k,v in super().items()]
super().clear()
super().update(mod)
def __getitem__(self,key):
return super().__getitem__(key.capitalize())
def __setitem__(self,key,value):
super().__setitem__(key.capitalize(),value)
def __delitem__(self,key):
super().__detitem__(key.capitalize())
これはある程度機能し、
>>> ex = capdict(map(reversed,enumerate("abc")))
>>> ex
{'A': 0, 'B': 1, 'C': 2}
>>> ex['a']
0
もちろん、実装することを思い出したメソッドのみ、たとえば
>>> 'a' in ex
False
は望ましい動作ではありません。
ここで、「コア」メソッドから派生できるすべてのメソッドを入力するための遅延方法は、で混合されcollections.abc.MutableMappingます。ただし、ここでは機能しません。問題のメソッド(__contains__例)はすでにによって提供されているためdictです。
ケーキを食べて食べる方法はありますか?MutableMappingそれらに基づいて他のメソッドを再実装するように、オーバーライドしたメソッドのみを表示するための魔法ですか?
@martineauありがとう、私が言ったようにそれはほんの一例でした。
—
ポールパンツァー
使用できます
—
Peter Wood
os._Environ。
MutableMapping。大文字と小文字を区別しない辞書を参照してください。