8.12. UserDict
--- 辞書オブジェクトのためのクラスラッパー¶
ソースコード: Lib/UserDict.py
このモジュールは最小限のマッピングインターフェイスをすでに持っているクラスのために、すべての辞書メソッドを定義しているmixin、 DictMixin
を定義しています。これによって、 (shelveモジュールのような) 辞書の代わりをする必要があるクラスを書くことが非常に簡単になります。
このモジュールでは UserDict
クラスも定義しています。
これは辞書オブジェクトのラッパーとして動作します。
これの必要性については既に dict
を直接的にサブクラス化出来るようになった (Python 2.2 から利用可能な機能です) ことによって大幅に取って代わられています。
dict
の導入以前には、 UserDict
クラスはメソッドをオーバライドしたり新しいメソッドを追加して、辞書風のサブクラスを作成するために使われていました。
UserDict
モジュールは UserDict
クラスと DictMixin
を定義しています:
-
class
UserDict.
UserDict
([initialdata])¶ 辞書をシミュレートするクラスです。 インスタンスの内容は通常の辞書に保存され、
UserDict
インスタンスのdata
属性を通してアクセスできます。 initialdata が与えられた場合は、data
はその内容で初期化されます; 他の目的のために使えるように、 initialdata への参照が保存されないことがあるということに注意してください。注釈
後方互換性のために、
UserDict
のインスタンスはイテレート可能ではありません。
-
class
UserDict.
IterableUserDict
([initialdata])¶ UserDict
のイテレーションをサポートするサブクラス (使用例:for key in myDict
).
マッピングのメソッドと演算 (マッピング型 --- dict を参照) に加えて、 UserDict
、 IterableUserDict
インスタンスは次の属性を提供します:
-
class
UserDict.
DictMixin
¶ __getitem__()
、__setitem__()
、__delitem__()
およびkeys()
といった最小の辞書インタフェースを既に持っているクラスのために、全ての辞書メソッドを定義する mixin です。この mixin はスーパークラスとして使われるべきです。上のそれぞれのメソッドを追加することで、より多くの機能がだんだん追加されます。例えば、
__delitem__()
以外の全てのメソッドを定義すると、使えないのはpop()
とpopitem()
だけになります。4 つの基底メソッドに加えて、
__contains__()
、__iter__()
およびiteritems()
を定義すれば、順次能力を増やしていけます。mixin はサブクラスのコンストラクタについて何も知らないので、
__init__()
やcopy()
は定義していません。Python 2.6 からは、
DictMixin
の代わりに、collections.MutableMapping
を利用することが推奨されています。DictMixin は
viewkeys()
,viewvalues()
,viewitems()
メソッドを実装していないことに注意してください。
8.13. UserList
--- リストオブジェクトのためのクラスラッパー¶
注釈
Python 2.2 がリリースされた際、 list
から直接的にサブクラス化することがこのクラスの多くのユースケースを包含することとなりました。ですがわずかばかりのユースケースが健在です。
このモジュールは下層のデータストアを包むリストインターフェイスを提供します。デフォルトではデータストアは list
ですが、(例えば永続化記憶のような) 他のオブジェクトに対してリストのようなインターフェイスで包むのに使うことが出来ます。
加えて、このクラスは多重継承を使って、組み込みクラスに mixin できます。
これが役に立つときがあって、例えば UserList
と str
の両方を同時に継承できます。
本物の list
と本物の str
ではこれはできないでしょう。
このモジュールはリストオブジェクトのラッパーとして働くクラスを定義します。独自のリストに似たクラスのために役に立つ基底クラスで、これを継承し既存のメソッドをオーバーライドしたり、あるいは、新しいものを追加したりすることができます。このような方法で、リストに新しい振る舞いを追加できます。
UserList
モジュールは UserList
クラスを定義しています:
-
class
UserList.
UserList
([list])¶ リストをシミュレートするクラスです。 インスタンスの内容は通常のリストに保存され、
UserList
インスタンスのdata
属性を通してアクセスできます。 インスタンスの内容は最初に list のコピーに設定されますが、デフォルトでは空リスト[]
です。 list は何らかのイテラブル、例えば通常の Python リストやUserList
オブジェクトです。注釈
UserList
モジュールは、Python 3 ではcollections
に移動しました。 2to3 ツールは、ソースコードの import を自動的に Python 3 向けに修正します。
可変シーケンスのメソッドと演算 (シーケンス型 --- str, unicode, list, tuple, bytearray, buffer, xrange を参照) に加えて、 UserList
インスタンスは次の属性を提供します:
サブクラス化の要件: UserList
のサブクラスは引数なしか、あるいは一つの引数のどちらかとともに呼び出せるコンストラクタを提供することが期待されています。
新しいシーケンスを返すリスト演算は現在の実装クラスのインスタンスを作成しようとします。
そのために、データ元として使われるシーケンスオブジェクトである一つのパラメータとともにコンストラクタを呼び出せると想定しています。
派生クラスがこの要求に従いたくないならば、このクラスがサポートしているすべての特殊メソッドはオーバーライドされる必要があります。その場合に提供される必要のあるメソッドについての情報は、ソースを参考にしてください。
バージョン 2.0 で変更: Python バージョン 1.5.2 と 1.6 では、コンストラクタが引数なしで呼び出し可能であることと変更可能な data
属性を提供するということも要求されていました。Pythonの初期のバージョンでは、派生クラスのインスタンスを作成しようとはしません。
8.14. UserString
--- 文字列オブジェクトのためのクラスラッパー¶
注釈
このモジュールの UserString
クラスは後方互換性のためだけに残されています。
書いているコードが Python 2.2 より前のバージョンの Python で動作する必要が無いのならば、 UserString
を使う代わりに組み込み str
型から直接サブクラス化することを検討してください (組み込みの MutableString
と等価なものはありません)。
このモジュールは文字列オブジェクトのラッパーとして働くクラスを定義します。独自の文字列に似たクラスのために役に立つ基底クラスで、これを継承し既存のメソッドをオーバーライドしたり、あるいは、新しいものを追加したりすることができます。このような方法で、文字列に新しい振る舞いを追加できます。
これらのクラスは本物の文字列や Unicode オブジェクトに比べてとてつもなく非効率であるということに注意すべきです。これは特に MutableString
に対して当てはまります。
UserString
モジュールは次のクラスを定義しています:
-
class
UserString.
UserString
([sequence])¶ 文字列または Unicode 文字列オブジェクトをシミュレートするクラスです。 インスタンスの内容は通常の文字列または Unicode 文字列オブジェクトに保存され、
UserString
インスタンスのdata
属性を通してアクセスできます。 インスタンスの内容は最初に sequence のコピーに設定されます。 sequence は通常の Python 文字列または Unicode 文字列、UserString
(またはサブクラス) のインスタンス、あるいは組み込みstr()
関数を使って文字列に変換できる任意のシーケンスのいずれかです。注釈
UserString
クラスは、Python 3 ではcollections
に移動しました。 2to3 ツールは、ソースコードの import を自動的に Python 3 向けに修正します。
-
class
UserString.
MutableString
([sequence])¶ このクラスは上の
UserString
から派生し、 可変に なるように文字列を再定義します。 可変な文字列は辞書のキーとして使うことができません。 なぜなら、辞書はキーとして 不変な オブジェクトを要求するからです。 このクラスの主な目的は、辞書のキーとして可変なオブジェクトを使うという試みを捕捉するために、継承と__hash__()
メソッドを取り除く (オーバーライドする) 必要があることを示す教育的な例を提供することです。 そうしなければ、非常にエラーになりやすく、その原因を突き止めることが困難でしょう。バージョン 2.6 で非推奨:
MutableString
クラスは Python 3 で削除されました。
文字列および Unicode オブジェクトのメソッドと演算 (文字列メソッド を参照) に加えて、 UserString
インスタンスは次の属性を提供します:
-
MutableString.
data
¶ UserString
クラスの内容を保存するために使われる実際の Python 文字列または Unicode オブジェクト。