對于列表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 可將課程添加到書簽
舉報