鱼C论坛

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

[已解决]类对象问题__len__

[复制链接]
发表于 2017-7-19 10:42:38 | 显示全部楼层 |阅读模式

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

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

x
class CountList:
    def __init__(self,*args):
        self.values=[x for x in args]
        self.count={}.fromkeys(range(len(self.values)),0)

    def __len__(self):
        return len(self.values)

    def __getitem__(self,key):
        self.count[key]+=1
        return self.values[key]


搞不清__len__函数是干嘛用的,我把函数注释掉了,整个类还是能运行的。。
望解答!!
最佳答案
2017-7-19 11:13:24
本帖最后由 shuofxz 于 2017-7-19 11:16 编辑
qq13459621230 发表于 2017-7-19 10:55
还是有点不懂,既然上面的__init__已经有len了,为什么还有定义__len__函数返回values,返回的values是上 ...


__len__(self)这个东西是魔法方法
也就是说调用len()函数的时候,会执行__len__()这个方法
你可以理解为len()是一个按钮,按了之后会执行__len__()这个具体的函数

现在你的__len__()中,执行的其实还是原来的len方法return len(self.values)
但如果你把return改成一个加法运算的话,那么执行len()的时候就变成加法运算了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-19 10:49:20 | 显示全部楼层
__len__ 就是 len()
len(obj) 实际是执行 obj.__len__ ()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-19 10:55:47 | 显示全部楼层
SixPy 发表于 2017-7-19 10:49
__len__ 就是 len()
len(obj) 实际是执行 obj.__len__ ()

还是有点不懂,既然上面的__init__已经有len了,为什么还有定义__len__函数返回values,返回的values是上哪去了呢,__init__中的len和len函数是什么关联呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-19 11:07:18 | 显示全部楼层
qq13459621230 发表于 2017-7-19 10:55
还是有点不懂,既然上面的__init__已经有len了,为什么还有定义__len__函数返回values,返回的values是上 ...

二楼内容读10遍就懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-19 11:13:24 | 显示全部楼层    本楼为最佳答案   
本帖最后由 shuofxz 于 2017-7-19 11:16 编辑
qq13459621230 发表于 2017-7-19 10:55
还是有点不懂,既然上面的__init__已经有len了,为什么还有定义__len__函数返回values,返回的values是上 ...


__len__(self)这个东西是魔法方法
也就是说调用len()函数的时候,会执行__len__()这个方法
你可以理解为len()是一个按钮,按了之后会执行__len__()这个具体的函数

现在你的__len__()中,执行的其实还是原来的len方法return len(self.values)
但如果你把return改成一个加法运算的话,那么执行len()的时候就变成加法运算了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-19 11:34:07 | 显示全部楼层
SixPy 发表于 2017-7-19 11:07
二楼内容读10遍就懂了

噢噢噢,读了大概知道点意思了!谢谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-19 11:34:28 | 显示全部楼层
shuofxz 发表于 2017-7-19 11:13
__len__(self)这个东西是魔法方法
也就是说调用len()函数的时候,会执行__len__()这个方法
你可以理 ...

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

使用道具 举报

发表于 2017-7-19 11:51:35 | 显示全部楼层
SixPy 发表于 2017-7-19 10:49
__len__ 就是 len()
len(obj) 实际是执行 obj.__len__ ()
  1. >>> class OBJ():
  2.         def __len__(self):
  3.                 print( 'OBJ.__len__')
  4.                 return 0

  5.        
  6. >>> obj=OBJ()
  7. >>> len(obj)
  8. OBJ.__len__
  9. 0
  10. >>> obj.__len__()
  11. OBJ.__len__
  12. 0
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 16:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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