안녕하십니까.
이터레이터 부분을 보다가 이해가 많이 안되어서 문의드립니다.
이터레이터를 __getitem__ 을 이용해서 만들때 index는 순서 아닌가요??
def __getitem__(self,index):
if index<self.stop:
return index
else:
raise IndexError
이 부분에서 인덱스 라는 것은 리스트나 튜플 안에 있는 0,1,2,3 이런 순서에 있는 요소들이 아닌가요?? 리스트가 만들어 지지 않았는데 어떻게 인덱스를 가져올 수 있었을까요..
그리고 39.7 심사문제에서 왜 total second = index+self.start가 되는 거에요?? 테스트 케이스 예제 부분에서 0 3 2 를 표준입력으로 하고 보면 total second 는 3초 라고 생각을 했어요. 제가 이해가 안되는 것은 여기서 index 가 무엇을 의미 하길레 total second를 구할때 쓰는 것일까요??
감사합니다 많이 배우고 있읍니다
UNIT 39.3을 반복 학습하고, 39.7 심사문제 해설을 살펴보는 것을 추천합니다.
인덱스를 사용할 수 없는 객체에 인덱스를 사용할 수 있게 만들어 주는 것이 __getitem__입니다.
리스트에서 a[0]으로 사용할 수 있는 것은 리스트에 __getitem__이 구현되어 있기 때문입니다. a[0]을 사용하면 a.__getitem__(0)이 호출되는 것이죠.
TimeIterator를 만들었는데 map 객체로 만들었습니다. map 객체는 [] 첨자연산자를 사용할 수 없습니다. 그런데 제시된 코드를 보면 TimeIterator(start, stop)으로 map 객체를 만들었고,
TimeIterator(start, stop)[index]처럼 첨자 연산자로 접근하는 것을 알 수 있습니다.
따라서 [index]처럼 사용할 수 있게 __getitem__을 구현해야 합니다.
__getitem__을 구현할 때 index에 따라 어떤 값을 반환할지는 구현자의 선택입니다. [0]을 첫 번째 요소를 반환하는 것으로 만들지, 마지막 요소를 반환하는 것으로 만들지는 전적으로 구현자의 선택 사항이지, __getitem__(0)을 호출했을 때 무조건 첫 번째 원소를 반환해야 한다는 아닙니다.
그럼 이 문제에서는 index 를 마지막 index로 생각하고 해서
총 second 가 self.second+index 가 되는 것 이겠군요!!