1. iter メソッドの役割
iter メソッドはクラスがイテレータとして振る舞うための特殊メソッドです。このメソッドを実装することで、クラスのオブジェクトを iter() 関数で呼び出せるようになります。
class MyIterator: def __iter__(self): return self
iter メソッドでは、通常 self を返し、これによりオブジェクト自体がイテレータであることが示されます。これによって for ループなどでオブジェクトを直接イテレートできるようになります。
2. next メソッドの役割
next メソッドはイテレータが次の要素を返すための特殊メソッドです。このメソッドを実装することで、next() 関数や for ループでイテレーションが進められます。
class MyIterator: def __next__(self): # 次の要素があれば返す # なければ StopIteration を発生させる if ...: return ... else: raise StopIteration
next メソッド内で次の要素があればその値を返し、なければ StopIteration を発生させることでイテレーションを終了させます。
3. イテレータの実装例
class CountdownIterator: def __init__(self, start: int) -> None: self.start: int = start def __iter__(self) -> 'CountdownIterator': return self def __next__(self) -> int: if self.start > 0: result: int = self.start self.start -= 1 return result else: raise StopIteration # CountdownIteratorのインスタンスを作成 countdown_iterator: CountdownIterator = CountdownIterator(5) # イテレーションを通じて値を取得 for number in countdown_iterator: print(number)
この例では、CountdownIterator クラスが iter と next メソッドを実装しています。これにより、オブジェクトがイテレータとして機能し、for ループなどで使用できるようになります。