栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

python中描述符概念的行为(令人困惑)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python中描述符概念的行为(令人困惑)

Test1
Descriptor
未真正用作描述符的情况下,它只是一个称为的普通属性
name
,碰巧有一些特殊方法。但这还不是真正的描述符。

如果您阅读有关如何调用描述符的文档,则会看到用于调用描述符方法的机制。在您的情况下,这将意味着

t.name
大致相当于:

type(t).__dict__['name'].__get__(t, type(t))

t1.name

type(t1).__dict__['name'].__get__(t1, type(t1))

name
__dict__
在类的而不是实例中查找的,因此区别在于
Test1.__dict__
没有称为的描述符
name

>>> Test.__dict__['name']<__main__.Descriptor object at 0x7f637a57bc90>>>> Test1.__dict__['name']Traceback (most recent call last):   File "<stdin>", line 1, in <module>KeyError: 'name'

您还应该考虑的是,描述符

value
本身设置了属性,这意味着的所有实例
Test
将共享相同的值:

>>> t1 = Test(1)init testsetting>>> t2 = Test(2)init testsetting>>> t1.namegetting2>>> t2.namegetting2>>> t1.name = 0setting>>> t2.namegetting0

我认为您迫切希望做的是设置

value
instance
而不是那样
self
,这样可以使您获得预期的行为
Test



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/661490.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号