2

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.nameget メソッドが呼び出されます。ただし、同じ方法で値を設定しようとすると、Person.name = 'Jack'set が呼び出されません。ここで、 set が呼び出されることを期待していました。

この振る舞いが理解できません。

Python 3.8 を使用しています。

4

1 に答える 1