매직 메서드란?
파이썬에서는 __init__, __str__, __len__ 같은 양쪽에 밑줄이 붙은 메서드들을 **매직 메서드(혹은 스페셜 메서드)**라고 부릅니다.
이 메서드들은 파이썬의 내장 연산자나 구문과 객체를 연결해주는 역할을 합니다.
1. __getitem__이란?
__getitem__은 객체가 obj[key] 형태로 인덱싱, 슬라이싱, 딕셔너리 접근 등을 지원하게 만드는 메서드입니다.
즉,
obj[0]
obj["key"]
obj[1:5]
이런 문법을 객체에 사용할 수 있도록 도와주는 것이 __getitem__입니다.
2. 예제: 나만의 리스트 클래스 만들기
class MyList:
def __init__(self, data):
self.data = data
def __getitem__(self, index):
return self.data[index]
ml = MyList([10, 20, 30, 40])
print(ml[1]) # 👉 20
print(ml[1:3]) # 👉 [20, 30]
설명:
- ml[1]을 호출하면 내부적으로 ml.__getitem__(1)이 실행됩니다.
- 즉, 리스트처럼 동작하지만 사실은 우리가 정의한 동작입니다.
3. 실전 예: Dataset 클래스에서 사용되는 __getitem__
예를 들어 다음처럼 파일에서 일부 데이터를 가져오는 클래스를 만들 수도 있습니다:
class Dataset:
def __init__(self, data):
self.data = data
def __getitem__(self, idx):
print(f"[LOG] Getting item at index {idx}")
return self.data[idx]
ds = Dataset(["a", "b", "c", "d"])
print(ds[2]) # 👉 [LOG] Getting item at index 2 → 'c'
이처럼 슬라이싱이나 반복 접근이 필요한 객체에 매우 유용합니다.
꼭 알아둘 점
- __getitem__을 구현하면 for item in obj: 루프도 자동으로 지원됩니다.
- __setitem__과 함께 사용하면 obj[key] = value도 구현 가능.
정리하면
| 항목 | 설명 |
| 역할 | obj[key], obj[start:stop] 같은 구문을 객체에 적용 가능하게 함 |
| 장점 | 리스트, 딕셔너리, 배열처럼 동작하는 커스텀 객체 구현 가능 |
| 활용처 | 데이터셋 객체, 캐시 시스템, 프록시 객체 등 |
__getitem__은 객체를 더 “파이썬스럽게” 만들고, 사용자 정의 자료구조에 직관적인 접근성을 제공합니다.
'파이썬 > 클래스와 객체 지향' 카테고리의 다른 글
| 파이썬에서 클래스, 객체, 인스턴스, 개체 개념 정리 (0) | 2025.08.31 |
|---|---|
| 클래스 vs 함수: 어떻게 설계하고 구성할 것인가? (0) | 2025.06.22 |
| 래핑(Wrapping)이란? (0) | 2025.06.06 |
| Python 생성자 함수: 가변 객체 사용 (0) | 2025.06.01 |
| Python 생성자 함수 __init__의 권장 사용법 (0) | 2025.06.01 |