PropertyDescriptor を使って、かんたんにプロパティを記述する
属性記述子は、Pythonで属性へのアクセスを制御するために用いられる機構で、__get__、__set__、__delete__メソッドを定義して、属性の読み出し、設定、削除の振る舞いを制御可能
属性記述子を使用した例を簡単にお見せしましょう。
class PropertyDescriptor:
def __init__(self, initial_value=None):
self._value = initial_value
def __get__(self, instance, owner):
return self._value
def __set__(self, instance, value):
self._value = value
def __delete__(self, instance):
del self._value
class MyClass:
my_attribute = PropertyDescriptor()
def __init__(self, initial_value):
self.my_attribute = initial_value
上記の例では、PropertyDescriptorクラスはインスタンス変数_valueを含むプロパティ記述者を定義します。MyClassクラスでは、my_attribute属性はPropertyDescriptorのインスタンスに設定されています。
そして今、MyClass のオブジェクトを生成して、my_attribute プロパティにアクセスすることができます。
obj = MyClass(10)
print(obj.my_attribute) # 输出 10
my_attribute 属性の値は変更することもできます。
obj.my_attribute = 20
print(obj.my_attribute) # 输出 20
そして最後に、’my_attribute’属性を削除します。
del obj.my_attribute
print(obj.my_attribute) # 抛出 AttributeError: 'MyClass' object has no attribute '_value'
プロパティデクスリプタを使用することで、計算、検証、制限などをし、プロパティへのアクセスの振る舞いをより柔軟にコントロールできます。