본문 바로가기

매직 메서드 - 컬렉션

1. 컬렉션 매직메서드 개요

파이썬의 컬렉션 매직메서드들을 사용하면 사용자 정의 클래스를 리스트나 딕셔너리처럼 동작하게 만들 수 있습니다.

2. __len__ 메서드

len() 함수 호출 시 실행되는 메서드입니다. 컬렉션의 크기를 반환합니다. return 함수를 수정해보세요.

class Stack:
    def __init__(self):
        self.items = []
    
    def push(self, item):
        self.items.append(item)
    
    def __len__(self):
        return len(self.items)

stack = Stack()
stack.push(1)
stack.push(2)
print(len(stack))  # 출력: 2

3. __getitem__ 메서드

대괄호로 접근할 때(obj[key]) 실행되는 메서드입니다. return 함수를 수정해보세요.

class Store:
    def __init__(self):
        self.items = {'apple': 500, 'banana': 800}
    
    def __getitem__(self, key):
        return self.items[key]

store = Store()
print(store['apple'])  # 출력: 500

4. __setitem__ 메서드

대괄호로 값을 할당할 때(obj[key] = value) 실행되는 메서드입니다.

class Grades:
    def __init__(self):
        self.scores = {}
    
    def __setitem__(self, student, score):
        if 0 <= score <= 100:
            self.scores[student] = score
        else:
            raise ValueError("점수는 0-100 사이여야 합니다")

grades = Grades()
grades['김학생'] = 85

5. __delitem__ 메서드

del 키워드로 삭제할 때 실행되는 메서드입니다.

class ShoppingCart:
    def __init__(self):
        self.items = {'apple': 2, 'banana': 3}
    
    def __delitem__(self, item):
        del self.items[item]

cart = ShoppingCart()
del cart['apple']

6. __contains__ 메서드

in 연산자 사용 시 실행되는 메서드입니다.

class Users:
    def __init__(self):
        self.names = {'admin', 'guest', 'user'}
    
    def __contains__(self, name):
        return name in self.names

users = Users()
print('admin' in users)   # 출력: True
print('hacker' in users)  # 출력: False