Python的属性描述符
Python3.8文档中对于属性描述符优先级的说明:
对于实例绑定,发起描述器调用的优先级取决于定义了哪些描述器方法。
一个描述器可以定义 __get__()
、__set__()
和 __delete__()
的任意组合。如果它没有定义 __get__()
,则访问属性会返回描述器对象自身,除非对象的实例字典中有相应属性值。如果描述器定义了 __set__()
和/或 __delete__()
,则它是一个数据描述器;如果以上两个都未定义,则它是一个非数据描述器。通常,数据描述器会同时定义 __get__()
和 __set__()
,而非数据描述器只有__get__()
方法。定义了 __set__()
和 __get__()
的数据描述器总是会重载实例字典中的定义。与之相对的,非数据描述器可被实例所重载。
测试:总结:
数据描述符拦截属性写/删, 并对__get__()
的优先级有影响。__get__()
在优先级生效时,执行拦截操作。
还没有评论,来说两句吧...