メモめもメモ

環境構築やプログラミングに関するメモ

Python3のclassに反復処理をサポートさせる

classに__iter__と__next__メソッドを実装することで、反復処理をサポートさせることができます。 反復処理をサポートしたclassは、for文などに対してiterable objectとして与えることが可能です。

コード

# 反復処理をサポートしたクラス
class iter_sample:
    def __init__(self):
        self.cnt = 0
        self.data = ["yamada", "tanaka", "suzuki"]
    
    # __iter__()と__next__()を実装したオブジェクトを返すメソッド
    def __iter__(self):
        # ここでは自分自身を返せばOK
        return self

    # 次のアイテムを返すメソッド。反復処理が実行されるたびに呼ばれる。
    def __next__(self):
        if self.cnt >= len(self.data):
            # これ以上アイテムが無い場合は必ずStopIterationをraiseすること
            raise StopIteration
        ret = self.data[self.cnt]
        self.cnt += 1
        return ret


# 使用例
if __name__ == "__main__":
    sample = iter_sample()
    for i in sample:
        print(i)

# 実行結果
# yamada
# tanaka
# suzuki