collections.abc — 컨테이너의 추상 베이스 클래스¶
버전 3.3에 추가: 이전에는, 이 모듈이 collections 모듈의 일부였습니다.
소스 코드: Lib/_collections_abc.py
이 모듈은 클래스가 특정 인터페이스를 제공하는지를 검사하는 데 사용할 수 있는 추상 베이스 클래스를 제공합니다; 예를 들어, 해시 가능한지 또는 매핑인지입니다.
Collections 추상 베이스 클래스¶
collections 모듈은 다음과 같은 ABC를 제공합니다:
| ABC | 상속 | 추상 메서드 | 믹스인 메서드 | 
|---|---|---|---|
| 
 | |||
| 
 | |||
| 
 | |||
| 
 | 
 | ||
| 
 | |||
| 
 | 
 | ||
| 
 | |||
| 
 | |||
| 
 | |||
| 
 | 
 | ||
| 
 | 상속된  | ||
| 
 | 상속된  | ||
| 
 | 
 | ||
| 
 | 상속된  | ||
| 
 | 
 | ||
| 
 | 상속된  | ||
| 
 | |||
| 
 | |||
| 
 | |||
| 
 | |||
| 
 | |||
| 
 | 
 | ||
| 
 | |||
| 
 | 
 | ||
| 
 | 
 | 
- 
class collections.abc.Container¶
- 
class collections.abc.Hashable¶
- 
class collections.abc.Sized¶
- 
class collections.abc.Callable¶
- 각각 메서드 - __contains__(),- __hash__(),- __len__()및- __call__()을 제공하는 클래스의 ABC.
- 
class collections.abc.Iterable¶
- __iter__()메서드를 제공하는 클래스의 ABC.- isinstance(obj, Iterable)를 검사하면- Iterable로 등록되었거나- __iter__()메서드가 있는 클래스를 감지하지만,- __getitem__()메서드로 이터레이트 하는 클래스는 감지하지 않습니다. 객체가 이터러블인지를 확인하는 유일하게 신뢰성 있는 방법은- iter(obj)를 호출하는 것입니다.
- 
class collections.abc.Collection¶
- 길이가 있는 이터러블 컨테이너 클래스의 ABC. - 버전 3.6에 추가. 
- 
class collections.abc.Iterator¶
- __iter__()와- __next__()메서드를 제공하는 클래스의 ABC. 이터레이터의 정의도 참조하십시오.
- 
class collections.abc.Reversible¶
- __reversed__()메서드도 제공하는 이터러블 클래스의 ABC.- 버전 3.6에 추가. 
- 
class collections.abc.Generator¶
- send(),- throw()및- close()메서드로 이터레이터를 확장하는 PEP 342에 정의된 프로토콜을 구현하는 제너레이터 클래스의 ABC. 제너레이터의 정의도 참조하십시오.- 버전 3.5에 추가. 
- 
class collections.abc.Sequence¶
- 
class collections.abc.MutableSequence¶
- 
class collections.abc.ByteString¶
- 읽기 전용과 가변 시퀀스의 ABC. - 구현 참고 사항: - __iter__(),- __reversed__()및- index()와 같은 일부 믹스인(mixin) 메서드는 하부- __getitem__()메서드를 반복적으로 호출합니다. 따라서,- __getitem__()이 상수 액세스 속도로 구현되면 믹스인 메서드는 선형 성능을 갖습니다; 그러나 하부 메서드가 선형이면 (링크드 리스트에서처럼), 믹스인은 2차 함수 성능을 가지므로 재정의해야 할 수 있습니다.- 버전 3.5에서 변경: index() 메서드는 stop과 start 인자에 대한 지원을 추가했습니다. 
- 
class collections.abc.MappingView¶
- 
class collections.abc.ItemsView¶
- 
class collections.abc.KeysView¶
- 
class collections.abc.ValuesView¶
- 매핑, 항목, 키 및 값 뷰의 ABC. 
- 
class collections.abc.Awaitable¶
- await표현식에서 사용할 수 있는 어웨이터블 객체의 ABC. 사용자 정의 구현은- __await__()메서드를 제공해야 합니다.- 코루틴 객체와 - CoroutineABC의 인스턴스는 모두 이 ABC의 인스턴스입니다.- 참고 - CPython에서, 제너레이터 기반 코루틴( - types.coroutine()이나- asyncio.coroutine()으로 데코레이트 된 제너레이터)은,- __await__()메서드가 없어도 어웨이터블 입니다. 이들에 대해- isinstance(gencoro, Awaitable)를 사용하면- False가 반환됩니다. 이들을 감지하려면- inspect.isawaitable()을 사용하십시오.- 버전 3.5에 추가. 
- 
class collections.abc.Coroutine¶
- 코루틴 호환 클래스의 ABC. 코루틴 객체(Coroutine Objects)에 정의된 다음 메서드를 구현합니다: - send(),- throw()및- close(). 사용자 정의 구현은- __await__()도 구현해야 합니다. 모든- Coroutine인스턴스는- Awaitable의 인스턴스이기도 합니다. 코루틴의 정의도 참조하십시오.- 참고 - CPython에서, 제너레이터 기반 코루틴( - types.coroutine()이나- asyncio.coroutine()으로 데코레이트 된 제너레이터)은,- __await__()메서드가 없어도 어웨이터블 입니다. 이들에 대해- isinstance(gencoro, Coroutine)을 사용하면- False가 반환됩니다. 이들을 감지하려면- inspect.isawaitable()을 사용하십시오.- 버전 3.5에 추가. 
- 
class collections.abc.AsyncIterable¶
- __aiter__메서드를 제공하는 클래스의 ABC. 비동기 이터러블의 정의도 참조하십시오.- 버전 3.5에 추가. 
- 
class collections.abc.AsyncIterator¶
- __aiter__와- __anext__메서드를 제공하는 클래스의 ABC. 비동기 이터레이터의 정의도 참조하십시오.- 버전 3.5에 추가. 
- 
class collections.abc.AsyncGenerator¶
- PEP 525와 PEP 492에 정의된 프로토콜을 구현하는 비동기 제너레이터 클래스의 ABC. - 버전 3.6에 추가. 
이러한 ABC들은 클래스나 인스턴스가 특정 기능을 제공하는지 묻는 것을 허용합니다, 예를 들어:
size = None
if isinstance(myvar, collections.abc.Sized):
    size = len(myvar)
ABC 중 일부는 믹스인으로도 유용하여 컨테이너 API를 지원하는 클래스를 쉽게 개발할 수 있게 합니다. 예를 들어, 전체 Set API를 지원하는 클래스를 작성하려면, __contains__(), __iter__() 및 __len__()의 세 가지 하부 추상 메서드 만 제공하면 됩니다. ABC는 __and__()와 isdisjoint()와 같은 나머지 메서드를 제공합니다:
class ListBasedSet(collections.abc.Set):
    ''' Alternate set implementation favoring space over speed
        and not requiring the set elements to be hashable. '''
    def __init__(self, iterable):
        self.elements = lst = []
        for value in iterable:
            if value not in lst:
                lst.append(value)
    def __iter__(self):
        return iter(self.elements)
    def __contains__(self, value):
        return value in self.elements
    def __len__(self):
        return len(self.elements)
s1 = ListBasedSet('abcdef')
s2 = ListBasedSet('defghi')
overlap = s1 & s2            # The __and__() method is supported automatically
Set과 MutableSet을 믹스인으로 사용할 때의 주의 사항:
- 일부 집합 연산은 새로운 집합을 만들기 때문에, 기본 믹스인 메서드는 이터러블로부터 새 인스턴스를 만드는 방법이 필요합니다. 클래스 생성자가 - ClassName(iterable)형식의 서명을 가진 것으로 가정합니다. 이 가정은 새로운 집합을 생성하기 위해- cls(iterable)를 호출하는- _from_iterable()이라는 내부 클래스 메서드로 분리되었습니다.- Set믹스인이 다른 생성자 서명을 갖는 클래스에서 사용되고 있으면, 이터러블 인자로부터 새 인스턴스를 생성할 수 있는 클래스 메서드로- _from_iterable()을 재정의해야 합니다.
- 비교를 재정의하려면 (의미는 고정되었으므로, 아마도 속도 때문에), - __le__()와- __ge__()를 재정의하십시오, 그러면 다른 연산은 자동으로 맞춰집니다.
- Set믹스인은 집합의 해시값을 계산하는- _hash()메서드를 제공합니다; 그러나 모든 집합이 해시 가능하거나 불변이지는 않기 때문에- __hash__()는 정의되지 않습니다. 믹스인을 사용하여 집합 해시 가능성을 추가하려면,- Set()와- Hashable()을 모두 상속한 다음,- __hash__ = Set._hash를 정의하십시오.
더 보기
- MutableSet으로 구축한 예제 OrderedSet 조리법.
