collections.abc —コンテナの抽象基本クラス—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.9/library/collections.abc
移動先:案内検索

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 sendthrow 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 メソッドとappendreverseextendpopremove、および [ 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__adddiscard 継承された Set メソッドおよびclearpopremove__ior____iand__、 [X94X ]、および__isub__
Mapping Collection __getitem____iter____len__ __contains__keysitemsvaluesget__eq__、および__ne__
MutableMapping Mapping __getitem____setitem____delitem____iter____len__ 継承されたマッピングメソッドとpoppopitemclearupdate、およびsetdefault
MappingView Sized __len__
ItemsView MappingViewSet __contains____iter__
KeysView MappingViewSet __contains____iter__
ValuesView MappingViewコレクション __contains____iter__
Awaitable __await__
Coroutine Awaitable sendthrow close
AsyncIterable __aiter__
AsyncIterator AsyncIterable __anext__ __aiter__
AsyncGenerator AsyncIterator asendathrow 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

SetMutableSet をミックスインとして使用する際の注意事項:

  1. 一部のセット操作は新しいセットを作成するため、デフォルトのミックスインメソッドには反復可能オブジェクトから新しいインスタンスを作成する方法が必要です。 クラスコンストラクタは、ClassName(iterable)の形式の署名を持っていると想定されています。 その仮定は、cls(iterable)を呼び出して新しいセットを生成する_from_iterable()と呼ばれる内部クラスメソッドに因数分解されます。 Set ミックスインが異なるコンストラクターシグネチャを持つクラスで使用されている場合は、反復可能な引数から新しいインスタンスを構築できるclassmethodまたは通常のメソッドで_from_iterable()をオーバーライドする必要があります。
  2. 比較をオーバーライドするには(おそらくセマンティクスが固定されているため、速度のために)、__le__()__ge__()を再定義すると、他の操作が自動的に続きます。
  3. Set ミックスインは、セットのハッシュ値を計算するための_hash()メソッドを提供します。 ただし、すべてのセットがハッシュ可能または不変であるとは限らないため、__hash__()は定義されていません。 ミックスインを使用してセットのハッシュ機能を追加するには、 Set()Hashable()の両方から継承し、__hash__ = Set._hashを定義します。

も参照してください