9章Pythonicなオブジェクト

絶対に、2個のアンダースコアを先付けしないでください。うっとうしいことに、これはプライベート変数です。

——Ian Bickingpip、virtualenv、Paste、その他多数のプロジェクトのクリエータ「Paste Style Guide」より[09-01]

Pythonのデータモデルのおかげで、ユーザ定義型は組み込み型と同じくらい自然に動作します。オブジェクトに必要なメソッドをダックタイピングの精神で実装するだけで、継承を使わなくても、思ったとおりに動作します。

ここまで、いろいろな組み込みオブジェクトの構造と動作を説明してきました。では、本物のPythonオブジェクトとして動作するユーザ定義クラスを構築しましょう。

本章は1章が終わったところから、つまりいろいろな異なる型のPythonオブジェクトで一般的に見られる特殊メソッドの実装方法を示すところから始まります。

本章では、次の方法を説明します。

  • repr()bytes()など、オブジェクトを異なる表現で示す各種の組み込み関数を使えるようにする方法
  • 別バージョンのコンストラクタをクラスメソッドとして実装する方法
  • 組み込みメソッドのformat()str.format()メソッドが用いる書式指定ミニ言語の拡張方法
  • 読み取り専用属性へのアクセス
  • セットやdictのキーとして利用するためのハッシュ可能オブジェクト
  • __slots__によるメモリの節約

これらはすべて、簡単な2次元ユークリッドベクトル型を作成しながらやっていきます。

ベクトル型を徐々に発展させていく途中で、次の2つのテーマを議論します。

  • @classmethodおよび@staticmethodデコレータをいつ、どのように使用すべきか ...

Get Fluent Python ―Pythonicな思考とコーディング手法 now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.