p.577에 맨 상단의 예제 iterator_getitem.py에 대한 질문입니다.
__geitem__메서드에서 입력값으로 index를 받고 있는데
맨 하단에 for i in Counter(3):에서는
stop값만 전달하고 있지, index값은 전달이 되지 않고 있습니다.
그런데 어떻게 0,1,2인덱스들이 출력이 되는건가요?
뒤에 p.582 심사문제에서도 마찬가지로
저는 코드를 이렇게 짰습니다.
class TimeIterator:
def __init__(self, start, stop):
self.start = start
self.stop = stop
def __getitem__(self, index):
if index<self.stop-self.start:
a=(((self.start+index)//60)//60)%24 #시간
b=((self.start+index)//60)%60
c=(self.start+index)%60
return '{0:02d}:{1:02d}:{2:02d}'.format(a,b,c)
else:
raise IndexError
start, stop, index = map(int, input().split())
for i in TimeIterator(start, stop):
print(i)
print('\n', TimeIterator(start, stop)[index], sep='')
답은 맞는거 같은데, 하단의 for구문에서 인덱스값을 넘겨주지 않았는데 어떻게 getitem메서드에서 index값을 받을수 있게 되는건가요?
첨자 연산자 []를 쓰면 인덱스로 값을 가져오게 됩니다. 이때 내부에는 __getitem__ 메서드가 필요합니다.
반복자로 가져오는 경우에는 첨자 연산자 []를 사용하는 게 아니므로 __getitem__ 메서드가 필요하지 않습니다.