PYTHON · 컬렉션
collections.abc
collections.abc로 커스텀 컬렉션이 올바른 인터페이스를 구현하는지 보장합니다.
컬렉션고급abcSequenceMapping추상 베이스 클래스
핵심 설명
collections.abc로 커스텀 컬렉션이 올바른 인터페이스를 구현하는지 보장합니다.
Python code
from collections.abc import (
Iterable, Iterator, Sequence, MutableSequence, Mapping
)
# 타입 체크
print(isinstance([1, 2], Sequence)) # True
print(isinstance({1: 2}, Mapping)) # True
print(isinstance(range(10), Sequence)) # True
# 커스텀 Sequence 구현
class FibSequence(Sequence):
def __init__(self, n: int):
self._data = []
a, b = 0, 1
for _ in range(n):
self._data.append(a)
a, b = b, a + b
def __getitem__(self, index):
return self._data[index]
def __len__(self):
return len(self._data)
fib = FibSequence(10)
print(list(fib)) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
print(5 in fib) # True (자동 구현됨)
print(fib.index(8)) # 6 (자동 구현됨)
print(fib.count(1)) # 2 (자동 구현됨)
print(fib[2:5]) # [1, 2, 3]학습 팁
ABC를 상속하면 필수 메서드를 구현하지 않았을 때 인스턴스 생성 시점에 에러가 발생하여 버그를 조기에 발견합니다.
주의할 점
__getitem__만 구현하면 이터러블처럼 동작하지만, Sequence ABC를 상속하면 __len__도 필수입니다.
자주 묻는 질문
collections.abc란 무엇인가요?
collections.abc 로 커스텀 컬렉션이 올바른 인터페이스를 구현하는지 보장합니다.
collections.abc 학습 시 주의할 점은 무엇인가요?
__getitem__ 만 구현하면 이터러블처럼 동작하지만, Sequence ABC를 상속하면 __len__ 도 필수입니다.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.