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 가 발생합니다.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.