鱼C论坛

 找回密码
 立即注册
查看: 3594|回复: 6

[已解决]python魔法方法与描述符

[复制链接]
发表于 2023-8-1 15:32:39 | 显示全部楼层
这段代码涉及到Python中的魔法方法和描述符(Descriptor)的概念。

魔法方法是Python中特殊的方法,它们以双下划线开头和结尾(例如 __init__ , __get__ 等),用于在特定情况下自动调用。描述符是一种自定义的属性访问方式,通过定义 __get__ 、 __set__ 和 __delete__ 方法,可以控制对类属性的访问。

在这段代码中,我们定义了一个 Age 描述符类,其中包含了 __get__ 方法,用于获取属性值。然后,我们创建了 Person 类,其中有一个 age 类属性,它使用了 Age 描述符。

当我们创建 Person 实例时,通过对 age 属性进行访问,Python会自动调用 Age 描述符的 __get__ 方法。在 __get__ 方法中,我们根据实例的 name 属性来返回相应的年龄。如果 name 为'zhangsan',返回20;如果 name 为'lisi',返回25;否则,返回一个 ValueError 异常,表示未知名字。

接下来,我们进行了一系列实例的测试:

1. 创建了名为 'zhangsan' 的 Person 实例 p1 ,然后打印 p1.age 。由于 p1.name 为 'zhangsan' ,所以通过 Age 描述符的 __get__ 方法返回了20。
2. 创建了名为 'lisi' 的 Person 实例 p2 ,然后打印 p2.age 。由于 p2.name 为 'lisi' ,所以通过 Age 描述符的 __get__ 方法返回了25。
3. 创建了名为 'wangwu' 的 Person 实例 p3 ,然后打印 p3.age 。由于 p3.name 既不是 'zhangsan' 也不是 'lisi' ,所以通过 Age 描述符的 __get__ 方法抛出了一个 ValueError 异常,表示未知名字。

这样,我们就了解了这段代码中描述符的作用以及魔法方法 __get__ 的调用时机和用法。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-4 07:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表