为了账号安全,请及时绑定邮箱和手机立即绑定

关于__len__重写时,调用len方法问题

class Students(object):

    def __init__(self, *args):

        self.names = args

    def __len__(self):

        print '11111111'

        return len(self.names)

ss = Students('Bob', 'Alice', 'Tim')

print len(ss)

教程举例当中,print len(ss)调用了类内重写的方法__len__,但是__len__这个方法内部又调用了len方法,为什么不会造成一个无限循环,按道理len方法还是会再调用__len__?

正在回答

3 回答

我也想知道,__len__按道理应该是重写了len()方法,但是里面为什么又会有len()这个方法呢


0 回复 有任何疑惑可以回复我~
#1

请你不要再打扰她了啊

自问自答,len()是python本来就有的函数,你没有定义Student这个类也可以用的,本来就可以用的,该方法return所传入参数的长度
2018-05-02 回复 有任何疑惑可以回复我~
  1. __len__作为特殊方法,是可以通过对象调用:ss.__len__() 

  2. 对象想调用len(),不一定要重写__len__方法

  3. 我只是不明白,__len__方法中再调用了len函数,这个len函数是来自哪里的?外部调用的len函数进入了__len__方法,那为什么内部调用的len函数没有进入自身的__len__方法中,造成一个死循环

1 回复 有任何疑惑可以回复我~

__len__不被直接调用,而是类的对象想调用len(),就必须在内类定义__len__,没什么好纠结的!

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255533    人
  • 解答问题       3038    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

关于__len__重写时,调用len方法问题

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号