对于列表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))
请验证,完成请求
由于请求次数过多,请先验证,完成再次请求
打开微信扫码自动绑定
绑定后可得到
使用 Ctrl+D 可将课程添加到书签
举报