collections.abc —コンテナの抽象基本クラス—Pythonドキュメント
collections.abc —コンテナの抽象基本クラス
バージョン3.3の新機能:以前は、このモジュールはコレクションモジュールの一部でした。
ソースコード: :source: `Lib / _collections_abc.py`
このモジュールは、クラスが特定のインターフェースを提供するかどうかをテストするために使用できる抽象基本クラスを提供します。 たとえば、ハッシュ可能かどうか、マッピングかどうかなどです。
コレクション抽象基本クラス
コレクションモジュールは、次の ABC を提供します。
ABC | から継承 | 抽象メソッド | Mixinメソッド |
---|---|---|---|
Container
|
__contains__
|
||
Hashable
|
__hash__
|
||
Iterable
|
__iter__
|
||
Iterator
|
Iterable
|
__next__
|
__iter__
|
Reversible
|
Iterable
|
__reversed__
|
|
Generator
|
Iterator
|
send 、throw
|
close 、__iter__ 、__next__
|
Sized
|
__len__
|
||
Callable
|
__call__
|
||
Collection
|
サイズ、反復可能、コンテナ | __contains__ 、__iter__ 、__len__
|
|
Sequence
|
リバーシブル、コレクション | __getitem__ 、__len__
|
__contains__ 、__iter__ 、__reversed__ 、index 、およびcount
|
MutableSequence
|
Sequence
|
__getitem__ 、__setitem__ 、__delitem__ 、__len__ 、insert
|
継承された Sequence メソッドとappend 、reverse 、extend 、pop 、remove 、および [ X103X]
|
ByteString
|
Sequence
|
__getitem__ 、__len__
|
継承されたシーケンスメソッド |
Set
|
Collection
|
__contains__ 、__iter__ 、__len__
|
__le__ 、__lt__ 、__eq__ 、__ne__ 、__gt__ 、__ge__ 、__and__ 、[ X77X] 、__sub__ 、__xor__ 、およびisdisjoint
|
MutableSet
|
Set
|
__contains__ 、__iter__ 、__len__ 、add 、discard
|
継承された Set メソッドおよびclear 、pop 、remove 、__ior__ 、__iand__ 、 [X94X ]、および__isub__
|
Mapping
|
Collection
|
__getitem__ 、__iter__ 、__len__
|
__contains__ 、keys 、items 、values 、get 、__eq__ 、および__ne__
|
MutableMapping
|
Mapping
|
__getitem__ 、__setitem__ 、__delitem__ 、__iter__ 、__len__
|
継承されたマッピングメソッドとpop 、popitem 、clear 、update 、およびsetdefault
|
MappingView
|
Sized
|
__len__
| |
ItemsView
|
MappingView 、 Set | __contains__ 、__iter__
| |
KeysView
|
MappingView 、 Set | __contains__ 、__iter__
| |
ValuesView
|
MappingView 、コレクション | __contains__ 、__iter__
| |
Awaitable
|
__await__
|
||
Coroutine
|
Awaitable
|
send 、throw
|
close
|
AsyncIterable
|
__aiter__
|
||
AsyncIterator
|
AsyncIterable
|
__anext__
|
__aiter__
|
AsyncGenerator
|
AsyncIterator
|
asend 、athrow
|
aclose 、__aiter__ 、__anext__
|
- class collections.abc.Container
__contains__()
メソッドを提供するクラスのABC。
- class collections.abc.Hashable
__hash__()
メソッドを提供するクラスのABC。
- class collections.abc.Sized
__len__()
メソッドを提供するクラスのABC。
- class collections.abc.Callable
__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
PEP 342 で定義されたプロトコルを実装するジェネレータークラスのABCは、 send()、 throw()、および[ X161X] close()メソッド。 ジェネレーターの定義も参照してください。
バージョン3.5の新機能。
- class collections.abc.Sequence
class collections.abc.MutableSequence
class collections.abc.ByteString 読み取り専用で変更可能なシーケンスのABC。
実装上の注意:
__iter__()
、__reversed__()
、index()
などの一部のミックスインメソッドは、基になる__getitem__()
メソッドを繰り返し呼び出します。 したがって、__getitem__()
が一定のアクセス速度で実装されている場合、ミックスインメソッドのパフォーマンスは線形になります。 ただし、基になるメソッドが線形である場合(リンクリストの場合のように)、ミックスインのパフォーマンスは2次であり、オーバーライドする必要があります。バージョン3.5で変更: index()メソッドは、 stop および start 引数のサポートを追加しました。
- class collections.abc.Set
class collections.abc.MutableSet
- 読み取り専用および可変セットのABC。
- class collections.abc.Mapping
class collections.abc.MutableMapping
- 読み取り専用で変更可能なマッピングのABC。
- class collections.abc.MappingView
class collections.abc.ItemsView
class collections.abc.KeysView
class collections.abc.ValuesView
- マッピング、アイテム、キー、および値のABC ビュー。
- class collections.abc.Awaitable
awaitable オブジェクトのABC。 await 式で使用できます。 カスタム実装は、
__await__()
メソッドを提供する必要があります。Coroutine オブジェクトと Coroutine ABCのインスタンスは、すべてこのABCのインスタンスです。
ノート
CPythonでは、ジェネレーターベースのコルーチン( types.coroutine()または asyncio.coroutine()で装飾されたジェネレーター)は、待機可能です。
__await__()
メソッド。 それらにisinstance(gencoro, Awaitable)
を使用すると、False
が返されます。 inspect.isawaitable()を使用してそれらを検出します。バージョン3.5の新機能。
- class collections.abc.Coroutine
コルーチン互換クラスのABC。 これらは、コルーチンオブジェクトで定義されている次のメソッドを実装します: 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__()
、および [の3つの基礎となる抽象メソッドを指定するだけで済みます。 X168X]。 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 ミックスインが異なるコンストラクターシグネチャを持つクラスで使用されている場合は、反復可能な引数から新しいインスタンスを構築できるclassmethodまたは通常のメソッドで_from_iterable()
をオーバーライドする必要があります。 - 比較をオーバーライドするには(おそらくセマンティクスが固定されているため、速度のために)、
__le__()
と__ge__()
を再定義すると、他の操作が自動的に続きます。 - Set ミックスインは、セットのハッシュ値を計算するための
_hash()
メソッドを提供します。 ただし、すべてのセットがハッシュ可能または不変であるとは限らないため、__hash__()
は定義されていません。 ミックスインを使用してセットのハッシュ機能を追加するには、 Set()と Hashable()の両方から継承し、__hash__ = Set._hash
を定義します。