python描述符机制
class animal:
def __init__(self):
self.name='cat'
cat=animal()
首先需要理解python 在绑定属性时,会发生什么。
首先,虽然未找到相关依据,python 实例对象在绑定属性时,首先会从__dict__列表查找,如果没有则会创建属性,但是创建之前首先会从一个描述符的维护列表中查看该属性是否属于描述符,如果是,则替换为描述符,否则按照正常操作
cat 在绑定name属性时,首先会去去object.__dict__列表中查找name属性是否存在,如果不存在继续通过type(object).__dict__查找,以及mro._dict__查找,如果找到“name" 属性,会首先判断其是否为操作符,如果为操作符,则会触发操作符机制,否则的话会通过_setattr_ 添加属性。而这些所有的过程其实都在一个黑魔法,那就是_getattribute。不管是属性绑定还是属性查找,都要首先执行它