class TimeIterator:
time = []
def __init__(self, start, stop):
self.start = start
self.stop = stop
self.index = 0
self.range = stop - start
def __iter__(self):
return self
def __next__(self):
start = self.start
index = self.index
self.start += 1
self.index += 1
hour = int(start // 3600)
mod_hour = hour % 24
minute = int((start - hour * 3600) // 60)
second = int(start - hour * 3600 - minute * 60)
time = '{0:>02d}:{1:>02d}:{2:>02d}'.format(mod_hour, minute, second)
self.time.append(time)
if self.start <= self.stop:
return self.time[index]
else:
raise StopIteration
def __getitem__(self, index):
if index < self.range:
return self.time[index]
else:
raise IndexError
위의 코드로 심사 통과는 했는데요 __getitem__ 메서드 하나만으로는 구현이 안되는건가요? 위의 코드에서 __next__ 메서드를 없애고 시간 구하는 코드를 __getitem__ 으로 옮기면 TypeError: Iter() returned non-iterator of type 'TimeIterator' 에러가 발생 합니다. 왜 이런 에러가 발생하는 것인지요?
-------------------------------------------------------------------------------------
문제점 찾아서 수정했습니다. iter 메서드를 삭제하니 문제가 해결되었습니다. 39.3 내용 복습하면서 getitem을 사용하면 init 과 iter를 생략해도 된다라고 되어 있어서 삭제 해본 건데요, 생략해도 된다는 것과 반드시 삭제해야 하는 것은 좀 다른 의미라서 혹시 생략하지 않을 때에는 어떻게 써야만 위와 같은 에러가 안나는 건가요?
return
'{0:02d}:{1:02d}:{2:02d}'.format(hour, minute, second)
이와 같은 형태로 값을 반환하는 이터레이터면 충분합니다.