Python で記述子がどのように機能するかを理解しようとしています。以下のコードスニペットがあります。
>>> class D(object):
def __get__(*_):
print('get called')
def __set__(*_):
print('set called')
>>>
>>> class Person(object):
name = D()
>>>
>>> jane = Person()
>>> jane.name
get called
>>> jane.name = 'Janny'
set called
>>> Person.name
get called
>>> Person.name = 'Jack'
>>>
クラス名を使用して記述子属性name
にアクセスすると、つまりPerson.name
get メソッドが呼び出されます。ただし、同じ方法で値を設定しようとすると、Person.name = 'Jack'
set が呼び出されません。ここで、 set が呼び出されることを期待していました。
この振る舞いが理解できません。
Python 3.8 を使用しています。