python __iter__和__getitem__区别
__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)