22章動的属性とプロパティ
プロパティの存在は、クラスの公開インターフェースの一部としてデータ属性を公開することが安全でありむしろ望ましいということを示します。プロパティの重要性はここにあります。
—— Martelli、Ravenscroft、Holden
『Why properties are important』†1
[†1] Alex Martelli、Anna Ravenscroft、Steve Holden、『Python in a Nutshell, 3rd ed』(https://fpy.li/pynut3、O'Reilly)、123ページ。
Pythonでは、データ属性とメソッドをまとめて属性と呼びます。メソッドは呼び出し可能な属性です。動的属性は、obj.attrのようにデータ属性と同じインターフェースでアクセスできますが、その値は要求に応じて計算されます。この設計はBertrand Meyerが提唱した統一されたアクセスの原理(Uniform Access Principle)に沿っています。
あるモジュールが提供するサービスは、すべて統一された記法を使ってアクセスできるべきです。このとき、結果をストレージから取得するか計算によって生成するかといったことが、アクセス元からわかるようなことは避けるべきです†2。
[†2] Bertrand Meyer、『Object-Oriented Software Construction, 2nd ed.』(Pearson)、57ページ。
Pythonでは動的属性を実装する方法がいくつか用意されています。この章では、特にシンプルな方法である@propertyデコレータと特殊メソッド__getattr__を解説します。
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access