鱼C论坛

 找回密码
 立即注册
查看: 1388|回复: 8

[已解决]魔法方法会不会造成死循环?

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

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

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

x
本帖最后由 shuofxz 于 2017-7-19 11:31 编辑

就比如下面这个例子,重写了魔法方法__len__(),但执行过程中又调用了len()方法,但len()方法还是会执行__len__()的内容,然后就这么一直死循环下去了?
  1. class new_list(list):
  2.     def __len__(self):
  3.         return len(self)
复制代码
最佳答案
2017-7-19 11:52:45


最后会内存溢出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-19 11:52:45 | 显示全部楼层    本楼为最佳答案   


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

使用道具 举报

 楼主| 发表于 2017-7-19 12:13:55 | 显示全部楼层
SixPy 发表于 2017-7-19 11:52


最后会内存溢出

刚才看的另外一个帖子代码,同样也是在__len__()中调用了len()方法,这个就不会死循环,是为什么呢?
  1. class CountList:
  2.     def __init__(self,*args):
  3.         self.values=[x for x in args]
  4.         self.count={}.fromkeys(range(len(self.values)),0)

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

  7.     def __getitem__(self,key):
  8.         self.count[key]+=1
  9.         return self.values[key]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-19 12:45:10 | 显示全部楼层
self.values=[x for x in args]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-19 14:18:31 | 显示全部楼层
SixPy 发表于 2017-7-19 12:45
self.values=[x for x in args]


没明白
这里面使用len()的时候,还是会调用__len__()方法啊,然后也会死循环吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-19 14:39:36 | 显示全部楼层
shuofxz 发表于 2017-7-19 14:18

没明白
这里面使用len()的时候,还是会调用__len__()方法啊,然后也会死循环吧?

大佬好久不见~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-19 14:45:45 | 显示全部楼层
self.values与self是两个概念
分指不同的对象

评分

参与人数 1荣誉 +4 鱼币 +4 贡献 +2 收起 理由
shuofxz + 4 + 4 + 2 热爱鱼C^_^

查看全部评分

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

使用道具 举报

 楼主| 发表于 2017-7-19 14:59:04 | 显示全部楼层
wuyuzi 发表于 2017-7-19 14:45
self.values与self是两个概念
分指不同的对象

可以这么理解么?
self.values不是这个CountList类的对象,执行len(self.values)时,并不是执行的CountList类里面的__len__()方法,而是list类中的__len__()方法,所以不会死循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-19 15:01:51 | 显示全部楼层

哈哈 并不是大佬啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 09:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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