章节
问答
课签
笔记
评论
占位
占位

Python类的__len__方法

对于列表List或者元组Tuple,通过内建方法len(),可以得出列表或者元组中元素的个数。如果一个类表现得像一个list,想使用len()函数来获取元素个数时,则需要实现__len__()方法。
比如我们实现一个班级Class的类,初始化把班级的同学名字列表传进去,希望len()函数可以返回班级同学的数量时,可以这样实现。

class Class:
    def __init__(self, students):
        self.students = students
    def __len__(self):
        return len(self.students)

students = ['Alice', 'Bob', 'Candy']
class_ = Class(students)
len(class_) # ==> 3

通过自定义__len__()方法,可以让len()函数返回相关的结果,如果没有定义__len__()方法的类使用len()函数获取长度时,将会引起异常。

class Class:
    def __init__(self, students):
        self.students = students

class_ = Class(students)
len(class_)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'Class' has no len()

任务

斐波那契数列是由 0, 1, 1, 2, 3, 5, 8...构成。

请编写一个Fib类,Fib(10)表示数列的前10个元素,print Fib(10) 可以打印出数列的前 10 个元素,len(Fib(10))可以正确返回数列的个数10。

?不会了怎么办

参考答案:

class Fib(object):
    def __init__(self, num):
        self.res = []
        self.num = num
        a = 0
        b = 1
        for x in range(num):
            self.res.append(a)
            a, b = b, a + b

    def __str__(self):
        return str(self.res)

    def __len__(self):
        return self.num

f = Fib(10)
print(f)
print(len(f))
||
1
2
# Enter a code
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
提交
重置代码
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

收藏课程后,能更快找到我哦~

使用 Ctrl+D 可将课程添加到书签

邀请您关注公众号
关注后,及时获悉本课程动态

举报

0/150
提交
取消
全部 精华 我要发布

最新回答 / weixin_慕妹1547746
还有为啥打印f直接就调用了__str__方法

最赞回答 / 慕前端5377531
相当于 c = a + b a = b b = c

已采纳回答 / 慕前端7080484
直接输入变量,调用的是__repr__()方法,而__repr__()用于显示给开发人员。而当使用str()时,实际调用的是__str__()方法,所以要用str()来转换。下载视频          

已采纳回答 / 你生哥我
str()方法是可以把这些对象转换为字符串对象输出。如果f本身是字符串,那么print(f)和print(str(f))则一样

最新回答 / weixin_慕娘7296860
右边计算完后 会赋值左边对应字符a, b = b, a+b  这种赋值,先计算等值 右边 就是 b=1 a+b=1  再赋值给a和b,那么 a=1, b=1 循环

已采纳回答 / weixin_慕娘7296860
len()是一个BIF(内置函数),是本就存在的;__len__()是由开发人员自己定义的

已采纳回答 / 慕设计6352853
给数列追加元素,用append()方法之前定义了一个空数列
self.res = []
随后的for循环逐个元素至该数列

已采纳回答 / 小毅同学
res是指物,事件,财产在代码中self.res仅仅作为Fib类的一个属性,用来存储数据希望我的解答能够帮助到你。

最赞回答 / 刈夔
 a, b = b, a + b  这句语句表示b的值赋给a,a+b的值赋给b,所以a的值变了

最赞回答 / 我爱喝阔落
右边计算完后 会赋值左边对应字符a, b = b, a+b  这种赋值,先计算等值 右边 就是 b=1 a+b=1  再赋值给a和b,那么 a=1, b=1 循环
全部 我要发布
最热 最新
只看我的

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

账号登录 验证码登录

遇到问题
忘记密码

代码语言