Python的属性描述符

太过爱你忘了你带给我的痛 2022-12-08 01:58 258阅读 0赞

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

发表评论

表情:
评论列表 (有 0 条评论,258人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JS对象属性描述符对象

    JS中Object对象的静态方法getOwnPropertyDescriptor可以返回指定对象的指定属性的描述,该描述是一个对象,称为属性描述符对象。属性描述符是 ECMAS