__getitem__
은 파이썬에서 객체가 인덱싱(obj[key]
) 또는 슬라이싱(obj[start:stop]
)될 때 호출되는 메서드입니다. 이 메서드를 클래스 안에 정의하면, 해당 클래스의 인스턴스를 리스트나 딕셔너리처럼 사용할 수 있습니다.
class MyList:
def __init__(self, data):
self.data = data
def __getitem__(self, index):
print(f"Called with index: {index}")
return self.data[index]
my_list = MyList([10, 20, 30])
print(my_list[1]) # => Called with index: 1
# => 20
obj[key]
가 호출되면 obj.__getitem__(key)
가 자동으로 호출됩니다.key
는 정수뿐만 아니라 슬라이스(slice), 튜플, 문자열 등도 될 수 있습니다.class MyList:
def __init__(self, data):
self.data = data
def __getitem__(self, index):
print(f"Index received: {index}")
return self.data[index]
lst = MyList([1, 2, 3, 4, 5])
print(lst[1:4]) # 슬라이스 객체(slice(1,4,None))가 전달됨
class Matrix:
def __init__(self, rows):
self.rows = rows
def __getitem__(self, index):
return self.rows[index]
m = Matrix([[1, 2], [3, 4]])
print(m[0][1]) # 2
__getitem__
은 읽기 전용입니다. 쓰기를 하려면 __setitem__
을 정의해야 합니다.KeyError
, IndexError
등을 적절히 처리해주는 것이 좋습니다.궁금하다면 __setitem__
, __delitem__
도 함께 설명해줄 수 있어요. 추가로 알려드릴까요?