class TEMP(object):
def __init__(self, num_lst):
self.num_lst = num_lst
self.i = 0
def __iter__(self):
# __iter__ 메소드는 해당 클래스가 리스트 등으로 불러졌을때, 이게 어떤 값을 리턴할지를 의미함
# 따라서, 값을 만들고 해당 리스트를 iter로 감싸고 리턴함.
# 즉 안에서 유지되는 값을 iter로 묶어서 내보내면 됨.
return iter(self.num_lst)
def __next__(self):
"""
- next는 한번에 값을 다 불러서 리턴하는 것이 아니고, 하나씩 순차적으로 읽어야 함.
- 이 과정에서 지금 어디까지 일힌 것인지를 파악하는 index value가 필요함. 이 값이 self.i임.
- 또한 그 값이 일정 이상 커지면, StopIteration이라는 예외를 발생시켜야 함.
"""
if self.i<len(self.num_lst):
temp = self.num_lst[self.i]
self.i+=1
return temp
else:
raise StopIteration
a = TEMP([1, 2, 3, 4, 5])
print(list(a)) # by __iter__ method
for x in a: # by __iter__ method
print(x)
print("=="*20)
for i in range(0, 5):
print(next(a))
[1, 2, 3, 4, 5]
1
2
3
4
5
========================================
1
2
3
4
5
댓글남기기