Python

이터레이터에서 왜 __iter__를 선언할까?

교 향 2022. 11. 25. 17:55

https://wikidocs.net/134909

class MyItertor:
    def __init__(self, data):
        self.data = data
        self.position = 0

    def __iter__(self):
        print(self)
        return self

    def __next__(self):
        if self.position >= len(self.data):
            raise StopIteration
        result = self.data[self.position]
        self.position += 1
        return result

if __name__ == "__main__":
    i = MyItertor([1,2,3])
    print(type(i))
    for item in i:
        print(item)

 

위키를 보며 '이터레이터'를 공부하던 중, 두 번째 def __iter__에서

굳이 왜 자기 자신을 반환하는 __iter__를 정의해 줘야 하는 걸까?란 의문이 들었다.

하여 __iter__부분을 지우고 돌려보니 돌아가지 않았는데, 이유는

 

def __init__과 def __iter__까지가 'iterable'한 객체를 만들겠다는 말이었다.

실제 코드를 돌리면 init과 iter는 한 번 돌고 __next__에서 실제로 여러번 함수가 돌아간다.

__iter__를 선언함으로 나는 'iterable'한 객체를 만들거야! 라며 파이썬에 알려주는 약속인 것이다.

 

즉, self로 MyItertor를 불러와 iterable하게 반환해주고순환하며

__next__에서 다음 동작으로 넘어가게 하여 'iterator'를 만드는 것임
https://shoark7.github.io/programming/python/iterable-iterator-generator-in-python
└ 이터레이터와 이터러블의 차이는 여기에 설명이 자세히 나와 있음.