【发布时间】:2017-11-04 19:51:29
【问题描述】:
来自https://docs.python.org/2/howto/descriptor.html:
descr.__get__(self, obj, type=None) --> value
descr.__set__(self, obj, value) --> None
descr.__delete__(self, obj) --> None
为什么__get__ 方法可以访问type 而其他两个没有?
【问题讨论】:
-
我很确定答案隐藏在here 中,但我无法完全确定。
-
来自Learning Python一书:
__get__访问方法另外接收一个所有者参数,指定描述符实例附加到的类。它的实例参数要么是访问属性的实例(对于instance.attr),要么是通过所有者类直接访问属性时的None(对于class.attr)。前者通常为实例访问计算一个值,如果支持描述符对象访问,后者通常返回self。 -
那么为什么
__set__和__delete__不会发生同样的事情呢? -
我猜这是因为当你设置或删除一个类的某些属性时,你只是简单地设置/删除它而不通过描述符?
标签: python python-2.7 descriptor