20章属性ディスクリプタ

ディスクリプタを学べば、より多くのツールを活用できるようになるだけでなく、Pythonの仕組みをより深く理解でき、その設計のエレガントさが感じられるようになります。

——Raymond HettingerPythonの中心的な開発者にして達人公式ドキュメントの「Descriptor HowTo Guide」より[20-01]

ディスクリプタは、同じアクセスロジックを複数の属性で再利用する方法です。たとえば、Django ORMやSQL AlchemyなどのORMにおけるフィールド型はディスクリプタで、データベースレコードのフィールドとPythonオブジェクトの属性の間のデータの流れを管理します†1

[†1] 監訳注:ORM(Object-Relational Mapping)については13.2節を参照。

ディスクリプタは、__get____set____delete__メソッドからなるプロトコルを実装するクラスです。propertyクラスは、これらのディスクリプタプロトコルをすべて実装しています。プロトコルではよくあることですが、部分的に実装してもかまいません。実際、現実に書かれたコードで目にするディスクリプタはほとんど__get____set__だけを実装しており、また多くは1つだけを実装しています。

ディスクリプタはPythonの際立った特徴であり、アプリケーションレベルだけでなく、言語のインフラストラクチャでも導入されています。プロパティ以外でディスクリプタを活用するPythonの機能にはメソッド、そしてclassmethodデコレータとstaticmethodデコレータがあります。Pythonの奥義を極めるには、ディスクリプタを理解しなければなりません。本章ではこれを説明します。 ...

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.