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 the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.