鱼C论坛

 找回密码
 立即注册
查看: 792|回复: 2

求助关于property原理的疑问

[复制链接]
发表于 2018-7-23 22:55:20 | 显示全部楼层 |阅读模式
10鱼币
00000000012.JPG


代码如图:
#进行实例化
>>> c = C()
>>> c.x
123
100

问题1:调用 c.x 要调用__get__方法可以理解,所以会打印 123 。但是这句 return self.fget(instance)  是什么意思啊,怎么结果还是100 啊,不怎么理解;这个 100 不是C 类的属性的值嘛?他们之间有什么的联系啊?

问题2:同样这两句也不理解,self.fset(instance,value)   ,   self.fdel(instance)         


谢谢

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-24 07:57:12 | 显示全部楼层
在MyPropty的__init__中声明将三个参数(函数对象)套给成员变量,然后在__get__,__set__,__del__中调用这个对象。
这个是涉及到对象的。不理解可以点我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-24 15:22:41 | 显示全部楼层
在C类下用描述符的目的:通过一个x,来调用C类的三个方法,即统一接口
它这里其实是在绕圈,当你c.x时,首先调用你描述符的__get__方法,但是,你的目的是干什么?你的目的是调用C类的getx方法,因此你要在描述符下面去调用C类的方法,至于为什么那么写:
self在这里代表x,因为x是描述符的实例对象
fget在在这里代表C类下面的getx方法,因为你将它当作参数传进去了

我是这么理解的,一个x无法调用三个方法,但是,一个类却可以,将类方法作为属性传给另一个类,这不就是组合吗。通过一个外来的类,将C类的方法捆在一起,然后再去调用,就完成了一个x调用三个方法的过程。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 00:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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