鱼C论坛

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

关于046课 自己定义一个Propery()---MyPropery

[复制链接]
发表于 2017-2-15 17:44:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 安jing一夏 于 2017-2-15 17:48 编辑
  1. class MyProperty():
  2.         def __init__(self,fget=None,fset=None,fdel=None):
  3.                 self.fget = fget
  4.                 self.fset = fset
  5.                 self.fdel = fdel
  6.         def __get__(self,instance,owner):
  7.                 return self.fget(instance)
  8.         def __set__(self,instance,value):
  9.                 self.fset(instance,value)
  10.         def __delete__(self,instance):
  11.                 self.fdel(instance)
复制代码

其中这三句
return self.fget(instance)
self.fset(instance,value)
self.fdel(instance)

fget() 在这里是方法了吗?什么时候定义的?fset(),fdel()同理
在__init__方法里面只是传入的参数的属性而已?

请技术大神帮忙答疑解惑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-16 15:51:09 | 显示全部楼层
Python标准库:内置函数property(fget=None, fset=None, fdel=None, doc=None)。本函数是设置类成员的属性。参数fget是获取类成员的属性值;参数fset是设置类成员的属性值;fdel是删除类成员;参数doc是设置属性的文档字符串。通过这个函数的方式,可以实现类成员变量隐藏的方式,也就是面向对象里封装的要求。fget的名字应该是不能随便动的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-16 16:04:56 | 显示全部楼层
但是自定义的话fget的名字应该是可以改的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-16 17:58:50 | 显示全部楼层
^ambition 发表于 2017-2-16 16:04
但是自定义的话fget的名字应该是可以改的
  1. def __set__(self,instance,value):
  2.                 self.fset(instance,value)
复制代码

比方说这里自定义了设置属性的功能,但是就直接self.fset(instance,value),这种加括号意思就是方法了,实际也没有定义这个方法会执行什么操作啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-17 11:07:32 | 显示全部楼层
因为前面__init__中self.fset=fset,而传入的fset是一个函数,所以self.fset(instance,value)就相当于fset(instance,value),也就是相当于在拥有fset方法的类中的fset(self,value)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-2-17 18:59:13 | 显示全部楼层
^ambition 发表于 2017-2-17 11:07
因为前面__init__中self.fset=fset,而传入的fset是一个函数,所以self.fset(instance,value)就相当于fset( ...

怎么理解这句__init__中self.fset=fset,而传入的fset是一个函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-18 10:07:10 | 显示全部楼层
因为在小甲鱼的例子中形参是fset,而传入的实参是他定义的另外一个类的setX方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 05:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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