PHpullh
학습 라이브러리/Python/커스텀 컨테이너

PYTHON · 컬렉션

커스텀 컨테이너

매직 메서드를 구현하여 내장 컬렉션처럼 동작하는 커스텀 컨테이너를 만듭니다.

컬렉션고급container컨테이너__len____iter__

핵심 설명

매직 메서드를 구현하여 내장 컬렉션처럼 동작하는 커스텀 컨테이너를 만듭니다.

Python code

class LimitedStack:
    """크기 제한이 있는 스택"""
    def __init__(self, maxsize: int = 10):
        self._items: list = []
        self._maxsize = maxsize

    def push(self, item):
        if len(self) >= self._maxsize:
            raise OverflowError(f"스택 최대 크기({self._maxsize}) 초과")
        self._items.append(item)

    def pop(self):
        if not self:
            raise IndexError("빈 스택")
        return self._items.pop()

    def __len__(self):
        return len(self._items)

    def __bool__(self):
        return len(self._items) > 0

    def __contains__(self, item):
        return item in self._items

    def __iter__(self):
        return reversed(self._items)

    def __repr__(self):
        return f"LimitedStack({self._items})"

stack = LimitedStack(5)
for i in range(5):
    stack.push(i)

print(stack)           # LimitedStack([0, 1, 2, 3, 4])
print(3 in stack)      # True
print(len(stack))      # 5
print(list(stack))     # [4, 3, 2, 1, 0]
print(stack.pop())     # 4

학습 팁

__bool__을 구현하면 if stack:으로 빈 컨테이너를 자연스럽게 검사할 수 있습니다.

주의할 점

__len__ 없이 __bool__만 구현하면 len() 호출 시 TypeError가 발생합니다.

자주 묻는 질문

커스텀 컨테이너란 무엇인가요?

매직 메서드를 구현하여 내장 컬렉션처럼 동작하는 커스텀 컨테이너를 만듭니다.

커스텀 컨테이너 학습 시 주의할 점은 무엇인가요?

__len__ 없이 __bool__ 만 구현하면 len() 호출 시 TypeError 가 발생합니다.