PHpullh

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 메타데이터를 가집니다.