
274
第 7 章 データ型とプロトコル
7.7
抽象基底クラス
伝統的な
Python
のプログラミングスタイルでは、プログラムの整合性を保つためにデータ型
にあまり依存しません。
Python
のドキュメントなどでは、昔から「シーケンスオブジェクト」や
「マッピングオブジェクト」のような、種類を区別する用語が使われていましたが、実際には「シー
ケンス型」や「マッピング型」という型は存在しませんでした。オブジェクト指向プログラミング
言語としては、「シーケンス」という型が存在し、リストやタプルはその派生型と考えるのは自然
ですが、
Python
ではそういう構造にはなっていません。そもそも、
Python
のバージョン
2.2
まで
はリストや辞書などの組み込み型には継承機能がなかったので、そのような構造は実現不可能でし
た。
Python
の「シーケンス型」とは、単に「シーケンス風にインデックスを指定して、要素の
取得や設定を行える型」の総称にすぎませんでした。他にも「マッピング型」「イテラブル型」
「イテレータ型」など、いろいろなカテゴリはありますが、実際には「型」は存在せず、そのカ
テゴリで必要な機能を持つ型のグループに過ぎませんでした。標準ライブラリには
operator.
isMappingType()
などの型チェックを行う関数もありましたが、このチェック結果もそれほど信頼
できるものではありませんでした。
このような、データの型そのものはあまり重視せず、必要なメソッドや属性などのインター
フェースが提供されているなら、それをシーケンスやマッピングとみなして利用しよう、というス ...