数据描述符和非数据描述符的正确定义是哪一个?

数据描述符和非数据描述符的正确定义是哪一个?,第1张

数据描述符和非数据描述符的正确定义是哪一个?

第二个引用是正确的。第二个引号来自Python语言参考(尽管您提供了错误的链接),并且该语言参考被认为比使用指南更具权威性。而且,它与实际行为匹配;在

PyDescr_IsData
你发现宏是实际的程序中使用
object.__getattribute__
,以确定作为数据描述什么计数,并且无论是
__set__
__delete__
将导致
tp_descr_set
对非空。

语言参考还解释了为什么

Set
不覆盖以下实例的dict
a.b

如果未定义

__get__()
,则访问属性将返回描述符对象本身,除非对象的实例字典中没有值。[…]带有
__set__()

__get__()
定义的数据描述符始终会覆盖实例字典中的重定义。

定义

__set__
__delete__
将设置类型的
tp_descr_set
插槽并创建类型数据描述符的实例。数据描述符将始终被调用以尝试设置或删除其管理的属性,即使实例dict中有一个条目具有相同的名称,即使该条目仅具有
__set__
且您正试图删除该属性也是如此。反之亦然。(如果没有所需的方法,它将引发异常。)如果数据描述符也具有
__get__
,则它还将拦截获取属性的尝试;否则,Python将退回到常规的属性查找行为,就好像它根本不是描述符。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5668254.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存