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