【18/09/10】关于len()和__len__()的一点小测试

本文通过实例演示了如何在Python中自定义类的__len__方法,并解释了len函数与其等价关系。同时,测试了非标准方法名称的调用情况。

在廖雪峰网站上获取对象信息章看到len()函数等价于__len__()方法,并且在我们自己定义的类里面,可以通过自己定义__len__()方法,然后通过len()函数来调用,有点疑惑,因此做一点小测试。

class MyDog(object):
    def __len__(self):
        return 100

dog = MyDog()
print(len(dog))

输出结果为100

疑问:是否任意字段都可以如此等价?将len改为saber试试,

class MyDog(object):
    def __saber__(self):
        return 100

dog = MyDog()
print(saber(dog))

 结果异常,

F:\pROGramming\pYthon\python.exe C:/Users/boTTle/PycharmProjects/Ironac/test.py
Traceback (most recent call last):
  File "C:/Users/boTTle/PycharmProjects/Ironac/test.py", line 6, in <module>
    print(saber(dog))
NameError: name 'saber' is not defined

Process finished with exit code 1

故此猜想,应该是内建函数len()的逻辑就是调用str方法str.__len__(),而在用户自定义__len__()之后,原方法逻辑被替换,但len()逻辑不变,因此可以如此等价替换,且仅限于该关键字。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值