ここに示されているUserDict.pyは、組み込みを厳密にエミュレートしますdict
。たとえば、次のようになります。
>>> class m(dict):
... def __missing__(self, key): return key + key
...
>>> a=m()
>>> a['ciao']
'ciaociao'
__missing__
ビルトインをサブクラス化するときに欠落しているキーを処理するための特別なメソッドをオーバーライドできるのと同じようにdict
、それをサブクラス化するときにオーバーライドできますUserDict
。
dictの公式Pythonドキュメントはここにあり、彼らはこう言っています:
バージョン2.5の新機能:dictのサブクラスがメソッド__missing__
()を定義している場合、キーキーが存在しない場合、
d[key]
操作はキーキーを引数としてそのメソッドを呼び出します。次に
、キーが存在しない場合、d[key]
操作は、呼び出しによって返された、または発生したものをすべて返したり、発生させたりします。__missing__(key)
他の操作やメソッドはを呼び出しません
__missing__()
。__missing__()
定義されていない場合、KeyError
が発生します。
__missing__()
メソッドである必要があります。インスタンス変数にすることはできません。例については、を参照してくださいcollections.defaultdict
。