默认的属相访问是从对象的字典中 get, set, 或者 delete 属性,;例如a.x的查找顺序是:
a.x -> a.__dict__['x'] -> type(a)....__delete__(self, obj) -> None
定义任何上面三个方法的任意一个,这个对象就会被认为是一个描述符,并且可以在被作为对象属性时重载默认的行为, 如果一个对象定义了__get...,如果一个实例的字典实现了无数据描述符的定义,那么这个字典中的属性会被优先使用,实现只读数据描述符,同时定义__get__()和__set__(),在__set__()中抛出AttributeError... 这说明所有的函数都是非数据描述符,它返回绑定或者非绑定方法依赖于它被对象还是类调用
在python中的实现如下:
class Function(object):...__dict__['f'] # Stored internally as a function
function f at 0x00C45070>
>>> D.f