# 12 `UserDict` -- 辞書オブジェクトのためのクラスラッパー

このモジュールは 最小限のマッピングインターフェイスをすでに持っているクラスのために、 すべての辞書メソッドを定義しているmixin、`DictMixin`を定義しています。これによって、shelveモジュールのような辞書の代わりをする必要があるクラスを書くことが非常に簡単になります。

このモジュールでは`UserDict`クラスを定義しています。これは辞書オブジェクトのラッパーとして 動作します。これは`dict`(Python 2.2から利用可能な機能です)によって置き換えられています。 `dict`の導入以前に、`UserDict`クラスは辞書風のサブクラスをオーバライドや新メソッドの 定義によって作成するために使われていました。

`UserDict`モジュールは`UserDict`クラスと`DictMixin`を定義しています:

クラス `UserDict`( | [initialdata])

  辞書をシミュレートするクラス。インスタンスの内容は通常の辞書に保存され、`UserDict`インスタンスの`data`属性を通してアクセスできます。initialdataが与えられれば、`data`はその内容で初期化されます。他の目的のために使えるように、initialdataへの参照が保存されないことがあるということに注意してください。 注意: 後方互換性のために、`UserDict`のインスタンスはイテレート可能ではありません。

クラス `IterableUserDict`( | [initialdata])

  `UserDict`のイテレーションをサポートするサブクラス (使用例: `for key in myDict`).

マッピングのメソッドと演算(節3.8を参照)に加えて、`UserDict`、`IterableUserDict`インスタンスは次の属性を提供します:

`data`
  `UserDict`クラスの内容を保存するために使われる実際の辞書。

クラス `DictMixin`( | )

  `__getitem__`、`__setitem__`、`__delitem__`および`keys` といった最小の辞書インタフェースを既に持っているクラスのために、全ての辞書メソッドを定義する mixin です。

  このmixinはスーパークラスとして使われるべきです。上のそれぞれのメソッドを 追加することで、より多くの機能がだんだん追加されます。 例えば、`__delitem__` 以外の全てのメソッドを定義すると、使えないのは `pop`と`popitem` だけになります。

  4 つの基底メソッドに加えて、`__contains__`、`__iter__` および`iteritems`を定義すれば、順次効率化を果たすことができます。

  mixin はサブクラスのコンストラクタについて何も知らないので、 `__init__()` や `copy()` は定義していません。