19章動的属性とプロパティ
パブリックなデータ属性をクラスのパブリックインタフェースの一部として安全に公開できるようにし、しかもそうすることが推奨されることから、プロパティの存在はきわめて重要です。
——Alex MartelliPythonの開発者にして著述家『Python in a Nutshell』,p.101より[EN-02]
データ属性とメソッドは、Pythonでは属性(attribute)と総称されています。メソッドは単に呼び出し可能な属性にすぎません。データ属性とメソッドに加え、プロパティ(property)も作成できます。プロパティはクラスインタフェースを変更せずとも、パブリックなデータ属性をgetter/setterといったaccessorメソッドで置き換えることができます。これは、次に示す統一アクセス原理(Uniform Access Principle)を満たしています†1。
[†1] Meyer:『Object-Oriented Software Construction』,p.57より[EN-40]。
モジュールが提供するサービスは、実装がストレージを介していようと演算によるものであろうと変わることなく、すべて統一された表記を介して利用できるべきです。
プロパティの他にも、Pythonには属性へのアクセスを制御し、動的属性(dynamic attribute)を実装するAPIが豊富に用意されています。インタプリタは__getattr__
や__setattr__
などの特殊メソッドを呼び出すことで、ドット表記(obj.attr
など)を介した属性アクセスを評価します。__getattr__
を実装するユーザ定義クラスは、obj.no_such_attribute ...
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.