首页 新闻 会员 周边 捐助

描述符类和property

0
[已关闭问题] 关闭于 2025-08-26 08:12

property能不能看作是已经写好的描述符类,描述符类都要自己定义,然后它的对象作为被托管类的属性,而property对象直接作为被托管类的对象

_java_python的主页 _java_python | 小虾三级 | 园豆:760
提问于:2025-08-26 08:11
< >
分享
所有回答(1)
0

先把几个概念摆清楚:

  1. 描述符协议:只要一个类实现了 get / set / delete 中的任意一个,它的实例就是“描述符对象”。
  2. property:C 语言实现的 现成描述符类,开箱即用;我们自己写的描述符类则是“自定义描述符”。
  3. 托管 / 被托管:在 Python 语境下,通常指“谁负责释放底层资源”。但在描述符场景里,可以把“描述符对象”当作 托管者(它接管了属性访问),把“托管在它身上的那个属性”当作 被托管值。


回答你的两句话
property 能不能看作是已经写好的描述符类?
✅ 可以。property 就是 CPython 内置的、已完全实现好的描述符类,源码在 C 里,名字叫 propertydescr(Python 层看不到)。
描述符类都要自己定义,然后它的对象作为被托管类的属性,而 property 对象直接作为被托管类的对象?
• 前半句:
❌ “都要自己定义”——不一定。property 就不用你定义;只有需要 额外行为 时才写自定义描述符。
• 后半句:
✅ 无论 property 还是自定义描述符,它们的实例都会放到类命名空间里(即“被托管类的属性”)。
❌ 但它们 不会变成“被托管类的对象”;它们只是 类属性,每个实例通过描述符协议去访问/存储 实例字典里的值。


一句话总结
property 就是 现成的描述符类;
描述符对象(无论是 property 还是你写的)统一放在类上(类属性),
它们负责 托管 每个实例真正保存的那一份数据(实例字典中的值)。

_java_python | 园豆:760 (小虾三级) | 2025-08-26 08:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册