默认的属相访问是从对象的字典中 get, set, 或者 delete 属性,;例如a.x的查找顺序是:
a.x -> a.__dict__['x'] -> type(a)....__get__(self, obj, type=None) -> value
descr.__set__(self, obj, value) -> None
descr....,如果一个实例的字典实现了无数据描述符的定义,那么这个字典中的属性会被优先使用,实现只读数据描述符,同时定义__get__()和__set__(),在__set__()中抛出AttributeError...__get__(b, type(b)) .优先级顺序:
数据描述符 > 实例变量 > 非数据描述符,__getattr__()具有最低优先级(如果实现了的话),C语言的实现可以在 Objects...,继承object的类自动实现或者他们有一个元类提供类似的功能,同样,重载 __getattribute__()可以停止描述符的调用
描述符例子
下面的代码创建了一个类,每次访问get或者set