# 14 `UserString` -- 文字列オブジェクトのためのクラスラッパー

注意: このモジュールの`UserString`クラスは後方互換性のためだけに残されています。Python 2.2より前のバージョンのPythonで動作する必要のないコードを書いているのならば、`UserString`を使う代わりに組み込み`str`型から直接サブクラス化することを検討してください(組み込みの`MutableString`と等価なものはありません)。

このモジュールは文字列オブジェクトのラッパーとして働くクラスを定義します。独自の文字列に似たクラスのために役に立つ基底クラスで、これを継承し既存のメソッドをオーバーライドしたり、あるいは、新しいものを追加したりすることができます。このような方法で、文字列に新しい振る舞いを追加できます。

これらのクラスは実際のクラスやユニコードオブジェクトに比べてとても効率が悪いということに注意した方がよいでしょう。これは特に`MutableString`に対して当てはまります。

`UserString`モジュールは次のクラスを定義しています:

クラス `UserString`( | [sequence])

  文字列またはユニコード文字列オブジェクトをシミュレートするクラス。インスタンスの内容は通常の文字列またはユニコード文字列オブジェクトに保存され、`UserString`インスタンスの`data`属性を通してアクセスできます。インスタンスの内容は最初にsequenceのコピーに設定されます。sequenceは通常のPython文字列またはユニコード文字列、`UserString`(またはサブクラス)のインスタンス、あるいは組み込み`str()`関数を使って文字列に変換できる任意のシーケンスのいずれかです。

クラス `MutableString`( | [sequence])

  このクラスは上の`UserString`から導出され、変更可能になるように文字列を再定義します。変更可能な文字列は辞書のキーとして使うことができません。なぜなら、辞書はキーとして変更不能なオブジェクトを要求するからです。このクラスの主な目的は、辞書のキーとして変更可能なオブジェクトを使うという試みを捕捉するために、継承と`__hash__()`メソッドを取り除く(オーバーライドする)必要があることを示す教育的な例を提供することです。そうしなければ、非常にエラーになりやすく、突き止めることが困難でしょう。

文字列とユニコードオブジェクトのメソッドと演算(節3.6.1、``文字列メソッド''を参照)に加えて、`UserString`インスタンスは次の属性を提供します:

`data`
  `UserString`クラスの内容を保存するために使われる実際のPython文字列またはユニコードオブジェクト。