在Python中,__iter__
方法是一個特殊的方法,它用于定義一個對象的迭代器行為。這個方法是面向對象編程中實現可迭代對象(即支持迭代的對象)的一部分。當你創建一個類,并且希望其實例能夠在例如 for
循環中被迭代時,你就需要實現這個方法。
基本概念
- 可迭代對象:如果一個對象定義了
__iter__
方法,它就是可迭代的。該方法需要返回一個迭代器對象,該對象本身包含一個__next__
方法用于獲取序列中的下一個元素。 - 迭代器:迭代器是實現了
__iter__
和__next__
方法的對象。__iter__
方法返回迭代器本身;__next__
方法返回序列中的下一個值。如果序列中沒有更多元素,__next__
應該拋出一個StopIteration
異常。
實現 __iter__
實現 __iter__
方法的一般方式是讓它返回一個對象,該對象有一個 __next__
方法。這個返回的對象可以是任何包含 __next__
方法的對象,包括實例本身。
示例:迭代一個自定義的序列類
假設我們想創建一個表示簡單數列的類,這個類可以迭代從0開始到給定上限的整數。以下是如何實現這個類的一個例子:
class Counter:def __init__(self, low, high):self.current = lowself.high = highdef __iter__(self):# 返回迭代器對象,這里是類本身return selfdef __next__(self):# 如果當前值小于上限,返回當前值并遞增if self.current < self.high:num = self.currentself.current += 1return num# 如果達到或超過上限,拋出 StopIterationraise StopIteration
這里,Counter
類通過實現 __iter__
和 __next__
方法成為了一個迭代器。你可以用一個 for
循環來迭代這個類的實例:
counter = Counter(1, 4)
for num in counter:print(num) # 輸出 1, 2, 3
使用生成器簡化
對于簡單的迭代邏輯,你可以使用生成器來自動處理 __iter__
和 __next__
的實現。這通過在一個方法中使用 yield
語句來實現:
class Counter:def __init__(self, low, high):self.low = lowself.high = highdef __iter__(self):current = self.lowwhile current < self.high:yield currentcurrent += 1
這里,__iter__
方法是一個生成器,它自動創建了一個迭代器對象。
總結
通過定義 __iter__
方法,你可以讓你的類支持迭代,這在處理序列數據、自定義數據結構或需要逐個元素處理的情況下特別有用。此外,使用生成器可以簡化迭代器的創建和管理。