8.12. UserDict —ディクショナリオブジェクトのクラスラッパー—Pythonドキュメント
8.12。 UserDict —ディクショナリオブジェクトのクラスラッパー
ソースコード: :source: `Lib / UserDict.py`
このモジュールは、ミックスイン 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 インスタンスは次の属性を提供します。
- IterableUserDict.data
- UserDict クラスの内容を格納するために使用される実際の辞書。
- class UserDict.DictMixin
__getitem__()
、__setitem__()
、__delitem__()
、keys()
など、最小のディクショナリインターフェイスがすでにあるクラスのすべてのディクショナリメソッドを定義するMixin。このミックスインはスーパークラスとして使用する必要があります。 上記の各メソッドを追加すると、機能が徐々に追加されます。 たとえば、
__delitem__()
を除くすべてを定義すると、完全なインターフェイスからpop()
とpopitem()
のみが除外されます。4つの基本的な方法に加えて、
__contains__()
、__iter__()
、およびiteritems()
の定義により効率が向上します。ミックスインはサブクラスコンストラクターを認識していないため、
__init__()
または copy()を定義しません。Pythonバージョン2.6以降では、 DictMixin の代わりに collections.MutableMapping を使用することをお勧めします。
DictMixinは、 viewkeys()、 viewvalues()、または viewitems()メソッドを実装していないことに注意してください。
8.13。 UserList —リストオブジェクトのクラスラッパー
ノート
Python 2.2がリリースされたとき、このクラスのユースケースの多くは、list
を直接サブクラス化する機能に含まれていました。 ただし、いくつかのユースケースが残っています。
このモジュールは、基盤となるデータストアの周りにリストインターフェイスを提供します。 デフォルトでは、そのデータストアはlist
です。 ただし、他のオブジェクト(永続ストレージなど)の周りにリストのようなインターフェイスをラップするために使用できます。
さらに、このクラスは、多重継承を使用して組み込みクラスと混在させることができます。 これは時々役に立ちます。 たとえば、 UserList と str から同時に継承できます。 これは、実際のlist
と実際の str の両方では不可能です。
このモジュールは、リストオブジェクトのラッパーとして機能するクラスを定義します。 これは、独自のリストのようなクラスの便利な基本クラスであり、それらから継承して既存のメソッドをオーバーライドしたり、新しいメソッドを追加したりできます。 このようにして、リストに新しい動作を追加できます。
UserList モジュールは、 UserList クラスを定義します。
- class UserList.UserList([list])
リストをシミュレートするクラス。 インスタンスのコンテンツは通常のリストに保持され、 UserList インスタンスの data 属性を介してアクセスできます。 インスタンスのコンテンツは、最初は list のコピーに設定され、デフォルトでは空のリスト
[]
に設定されます。 list は、任意の反復可能にすることができます。 実際のPythonリストまたは UserList オブジェクト。ノート
UserList クラスは、Python3の collections モジュールに移動されました。 2to3 ツールは、ソースをPython 3に変換するときに、インポートを自動的に適応させます。
可変シーケンスのメソッドと操作をサポートすることに加えて(セクションシーケンスタイプ— str、unicode、list、tuple、bytearray、buffer、xrange を参照)、 UserList インスタンスは次の属性を提供します:
- UserList.data
- UserList クラスのコンテンツを格納するために使用される実際のPythonリストオブジェクト。
サブクラス化の要件: UserList のサブクラスは、引数なしまたは1つの引数で呼び出すことができるコンストラクターを提供することが期待されています。 新しいシーケンスを返すリスト操作は、実際の実装クラスのインスタンスを作成しようとします。 そのために、コンストラクターは、データソースとして使用されるシーケンスオブジェクトである単一のパラメーターで呼び出すことができると想定しています。
派生クラスがこの要件に準拠することを望まない場合は、このクラスでサポートされているすべての特別なメソッドをオーバーライドする必要があります。 その場合に提供する必要のある方法については、情報源を参照してください。
バージョン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 は、通常のPython文字列またはUnicode文字列、 UserString (またはサブクラス)のインスタンス、または組み込みの[ X207X] str()関数。ノート
UserString クラスは、Python3の collections モジュールに移動されました。 2to3 ツールは、ソースをPython 3に変換するときに、インポートを自動的に適応させます。
- class UserString.MutableString([sequence])
このクラスは、上記の UserString から派生し、文字列を可変に再定義します。 辞書には不変オブジェクトがキーとして必要であるため、可変文字列を辞書キーとして使用することはできません。 このクラスの主な目的は、継承の教育的な例として機能し、変更可能なオブジェクトを辞書キーとして使用する試みをトラップするために
__hash__()
メソッドを削除(オーバーライド)する必要があることです。傾向があり、追跡するのが難しい。バージョン2.6以降非推奨: MutableString クラスはPython3で削除されました。
文字列およびUnicodeオブジェクトのメソッドと操作をサポートすることに加えて(セクション文字列メソッドを参照)、 UserString インスタンスは次の属性を提供します。
- MutableString.data
- UserString クラスのコンテンツを格納するために使用される実際のPython文字列またはUnicodeオブジェクト。