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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM