您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

Test1Descriptor未真正用作描述符的情况下,它只是一个称为的普通属性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 test
setting
>>> t2 = Test(2)
init test
setting
>>> t1.name
getting
2
>>> t2.name
getting
2
>>> t1.name = 0
setting
>>> t2.name
getting
0

我认为您迫切希望做的是设置valueinstance而不是那样self,这样可以使您获得预期的行为Test

python 2022/1/1 18:49:42 有340人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶