Learning Log

[Python] 클래스 __getitem__ 메서드와 이터레이터

카제xd 2023. 8. 23. 15:35

의문 지점: (BERT Fine-Tuning for Text Classification: Sentence-Pair Classification)

- samples는 위처럼 __getitem__메서드가 정의된 BertDataset Class의 객체이다.

 

 

 

 

해결:

 

iterator_getitem.py

class Counter:
    def __init__(self, stop):
        self.stop = stop
 
    def __getitem__(self, index):
        if index < self.stop:
            return index
        else:
            raise IndexError
 
print(Counter(3)[0], Counter(3)[1], Counter(3)[2])
 
for i in Counter(3):
    print(i, end=' ')

실행 결과

0 1 2
0 1 2

 

Counter(3)[0]을 출력했을 때 0이 나왔습니다. 마찬가지로 Counter(3)[1]은 1, Counter(3)[2]는 2가 나왔습니다. 그리고 for 반복문에 Counter를 사용했을 때도 1, 2, 3이 나왔습니다.

소스 코드를 잘 보면 __init__ 메서드와 __getitem__ 메서드만 있는데도 동작이 잘 됩니다. 클래스에서 __getitem__만 구현해도 이터레이터가 되며 __iter__, __next__는 생략해도 됩니다(초깃값이 없다면 __init__도 생략 가능).

 

 

 

[출처]

https://dojang.io/mod/page/view.php?id=2407