"class"vs"class of class"__get__和__set__?

shi*_*ufa 2 python descriptor python-3.x

问:为什么hh.a = 2不是我所期望的但ba = 2是好的?

这是代码:

class D:
    def __init__(self):
        print('this is init')
        self.name = ''

    def __get__(self,instance,owner):
        print('getting')
        return self.name


    def __set__(self,instance,value):
        print('setting')
        self.name = value
        return self.name
Run Code Online (Sandbox Code Playgroud)

和...

class hh:
    a = D()

b = hh()
Run Code Online (Sandbox Code Playgroud)

当我设置hh.a = 2时它不会调用print('setting')但是ba = 2是好的.你能解释一下吗?

use*_*ica 5

只有在拥有描述符的类的实例上设置属性时,才会激活描述符设置器.它们不适用于类本身或其子类.这在Python 数据模型中有记录.

3.3.2.1.实现描述符

...

object.__set__(self, instance, value)

调用以将所有者类的实例实例上的属性设置为新值value.