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.