# 3.8 `UserList` -- リストオブジェクトのためのクラスラッパー

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

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

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

class `UserList`( | [list])

  リストをシミュレートするクラス。インスタンスの内容は通常のリストに保存され、`UserList`インスタンスの`data`属性を通してアクセスできます。インスタンスの内容は最初にlistのコピーに設定されますが、デフォルトでは空リスト`[]`です。listは通常のPythonリストか、`UserList`(またはサブクラス)のインスタンスのどちらかです。

変更可能シーケンスのメソッドと演算(節2.3.6を参照)に加えて、`UserList`インスタンスは次の属性を提供します:

`data`
  `UserList`クラスの内容を保存するために使われる実際のPythonリストオブジェクト。

サブクラス化の要件: `UserList`のサブクラスは引数なしか、あるいは一つの引数のどちらかとともに呼び出せるコンストラクタを提供することが期待されます。新しいシーケンスを返すリスト演算は現在の実装クラスのインスタンスを作成しようとします。そのために、データ元として使われるシーケンスオブジェクトである一つのパラメータとともにコンストラクタを呼び出せると想定しています。

導出クラスがこの要求に従いたくないならば、このクラスがサポートしているすべての特殊メソッドはオーバーライドされる必要があります。その場合に提供される必要のあるメソッドについての情報は、ソースを参考にしてください。

バージョン2.0 以降で変更された 仕様: Pythonバージョン1.5.2と1.6では、コンストラクタが引数なしで呼び出し可能であることと変更可能な`data`属性を提供するということも要求されます。Pythonの初期のバージョンでは、導出クラスのインスタンスを作成しようとはしません。