特殊な名前をもったメソッドを定義することで、特殊な構文 (算術演算や
添え字表記、スライス表記のような) 特定の演算をクラスで実装することが
できます。これは、個々のクラスが Python 言語で提供されている演算子に対応した
独自の振る舞いをできるようにするための、演算子のオーバロード
(operator overloading) に対する Python のアプローチです。
例えば、あるクラスが __getitem__() という名前のメソッドを定義
しており、x
がこのクラスのインスタンスであるとすると、
x[i]
は x.__getitem__(i)
と等価になります。特に注釈の
ない限り、適切なメソッドが定義されていない場合にこのような演算を行おうと
すると例外が送出されます。
組み込み型をエミュレーションするようなクラスを実装する際には、 エミューレーションの実装をモデル化しようとしているオブジェクトで 意味のある範囲だけにとどめることが重要です。 例えば、シーケンスによっては個々の要素の取り出し操作が意味のある操作で ある一方、スライスの抽出が意味をなさないことがあります。 (W3C ドキュメントオブジェクトモデルにおける NodeList インタフェースがその一例です。)