"类" vs"班级实例" __get__和__set__?

时间:2017-03-11 20:15:41

标签: python python-3.x descriptor

问:为什么hh.a = 2不是我的预期,但是b.a = 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

和...

class hh:
    a = D()

b = hh()

当我设置hh.a = 2时,它不会调用打印('设置')但是b.a = 2是好的。你能解释一下吗?

1 个答案:

答案 0 :(得分:5)

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

  

3.3.2.1。实现描述符

     

...

     

object.__set__(self, instance, value)

     

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