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)

猜你喜欢

转载自www.cnblogs.com/callyblog/p/11333289.html