问:为什么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是好的。你能解释一下吗?
答案 0 :(得分:5)
只有在拥有描述符的类的实例上设置属性时,才会激活描述符设置器。它们不适用于类本身或其子类。这在Python data model中有记录。
3.3.2.1。实现描述符
...
object.__set__(self, instance, value)
被调用以将所有者类的实例实例上的属性设置为新值 value 。