鱼C论坛

 找回密码
 立即注册
查看: 1865|回复: 7

第46讲有不懂的地方

[复制链接]
发表于 2017-3-28 19:33:45 | 显示全部楼层 |阅读模式

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

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

x
不是说一个类内属性名和方法名不能一样么?不让属性会覆盖方法,但是在46讲内我看到小甲鱼编的这段程序我感到很疑惑,fget到底是属性还是方法呢?
微信截图_20170328192858.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-28 19:43:56 | 显示全部楼层
属性?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-28 21:22:06 | 显示全部楼层
fget就是属性呀,哪里有fget的方法名?

这里面一共四个方法
__init__
__get__
__set__
__del__
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-28 21:51:16 | 显示全部楼层
是属性,方法名不是跟在关键词def后面么,里面定义的当然是属性了,不会覆盖的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-29 14:41:55 | 显示全部楼层
shuofxz 发表于 2017-3-28 21:22
fget就是属性呀,哪里有fget的方法名?

这里面一共四个方法

我的迷惑在这里,就我自己理解来看,先是定义了一个类:MyProperty,然后在这个类里定义了四个方法:(1)__init__()     (2)__get__()    (3)__set__()   (4)__del__(),  其中,在__init__()方法里有三个属性:(1)fget  (2)fset  (3)fdel   在__get__方法里return了一个方法:fget()  ,在__set__方法里有一个方法:fset(),在__del__()方法里有一个方法fdel(),  我现在倒是不迷惑在__init__()方法里的属性和__get__()等方法里的方法重名了,因为他们不在一个层次里,就算重名也没啥影响,我现在的迷惑是__get__()、__set__()、__del__()三个方法里的fget()、fset()、fdel()方法都没定义啊,怎么就能直接用?望指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-29 14:44:07 | 显示全部楼层
sunnychou 发表于 2017-3-28 21:51
是属性,方法名不是跟在关键词def后面么,里面定义的当然是属性了,不会覆盖的

但是在__get__()、__set__()、__del__()三个方法里的fget()、fset()、fdel()都带括号了,还有参数传入,我就当他们三个是方法,我现在好奇为啥这三个方法都没定义过程就能直接用?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-29 15:31:04 | 显示全部楼层
z丶Kiwi 发表于 2017-3-29 14:41
我的迷惑在这里,就我自己理解来看,先是定义了一个类:MyProperty,然后在这个类里定义了四个方法:(1 ...
class property(fget=None, fset=None, fdel=None, doc=None)
Return a property attribute.

fget is a function for getting an attribute value. fset is a function for setting an attribute value. fdel is a function for deleting an attribute value. And doc creates a docstring for the attribute.

A typical use is to define a managed attribute x:



看上面的帮助文档:
fget   fget 等,可以理解为都是内置函数,都是python里本来就有的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-8 12:07:36 | 显示全部楼层
我也有疑惑,刚学会了一个查询函数dir。从下面结果来看,property本身内置fset,fget,fdel等函数,但是Myproperty是没有设置的。
难道定义为描述符类后会自动继承property的属性和方法,好像没看到哪里有描述。???
>>> dir(property)
['__class__', '__delattr__', '__delete__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__isabstractmethod__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__set__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'deleter', 'fdel', 'fget', 'fset', 'getter', 'setter']

>>> dir(MyProperty)
['__class__', '__delattr__', '__delete__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__set__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 17:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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