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__()
메서드를 제공해야 합니다.코루틴 객체와
Coroutine
ABC의 인스턴스는 모두 이 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 조리법.