__getitem__
單獨實現這個魔法函數,可以讓這個類成為一個可迭代的對象,並且可以通過使用下標獲取類中元素值下標的元素
class Library(object): def __init__(self): self.books = [1, 2, 3] self.index = -1 def __getitem__(self, i): return self.books[i] # def __iter__(self): # return self # # # def __next__(self): # self.index += 1 # if self.index > len(self.books)-1: # raise StopIteration() # return self.books[self.index] l = Library() print(l[1]) for i in l: print(i)
__iter__
這個是返回一個可迭代的對象,如果一個類實現了這個魔法函數,那么這個類就是可迭代對象,並且實現了__next__這個魔法函數的話,可以通過for循環遍歷;__next__如果單獨實現了這一個魔法函數,只能通過next()調用
class Library(object): def __init__(self): self.books = [1, 2, 3] self.index = -1 # def __getitem__(self, i): # return self.books[i] def __iter__(self): return self # # def __next__(self): self.index += 1 if self.index > len(self.books)-1: raise StopIteration() return self.books[self.index] l = Library() # print(l[1]) print(next(l)) for i in l: print(i)