默认的属相访问是从对象的字典中 get, set, 或者 delete 属性,;例如a.x的查找顺序是:
a.x -> a.__dict__['x'] -> type(a)....__delete__(self, obj) -> None
定义任何上面三个方法的任意一个,这个对象就会被认为是一个描述符,并且可以在被作为对象属性时重载默认的行为, 如果一个对象定义了__get...,如果一个实例的字典实现了无数据描述符的定义,那么这个字典中的属性会被优先使用,实现只读数据描述符,同时定义__get__()和__set__(),在__set__()中抛出AttributeError...唯一不同之处,就是第一个参数用来表示对象实例,python约定,实例引用可以使self或者this或者其他变量名称
为了支持方法调用,函数通过__get__()方法来实现属性访问时的方法绑定... 这说明所有的函数都是非数据描述符,它返回绑定或者非绑定方法依赖于它被对象还是类调用
在python中的实现如下:
class Function(object):