collections.abc — Classes Base Abstratas para Contêineres¶
Novo na versão 3.3: Anteriormente, esse módulo fazia parte do módulo collections.
Código-fonte: Lib/_collections_abc.py
Esse módulo fornece classes base abstratas que podem ser usadas para testar se uma classe fornece uma interface específica; por exemplo, se é hashable ou se é um mapeamento.
Classes Base Abstratas de Coleções¶
O módulo de coleções oferece o seguinte ABCs:
ABC |
Herda de |
Métodos Abstratos |
Métodos Mixin |
|---|---|---|---|
|
|||
|
|||
|
|||
|
|
||
|
|||
|
|
||
|
|||
|
|||
|
|||
|
|
||
|
Herdado os métodos da |
||
|
Herdado |
||
|
|
||
|
Herdado |
||
|
|
||
|
Herdado |
||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|
||
|
|||
|
|
||
|
|
-
class
collections.abc.Container¶ ABC para classes que fornecem o método
__contains__().
-
class
collections.abc.Hashable¶ ABC para classes que fornecem o método
__hash__().
-
class
collections.abc.Callable¶ ABC para classes que fornecem o método
__call__().
-
class
collections.abc.Iterable¶ ABC para classes que fornecem o método
__iter__().A verificação
isinstance(obj, Iterable)detecta classes que são registradas comoIterableou que possuem um método__iter__(), mas que não detecta classes que iteram com o método__getitem__(). A única maneira confiável de determinar se um objeto é iterável é chamariter(obj).
-
class
collections.abc.Collection¶ ABC para classes de contêiner iterável de tamanho.
Novo na versão 3.6.
-
class
collections.abc.Iterator¶ ABC para classes que fornecem os métodos
__iter__()e métodos__next__(). Veja também a definição de iterator.
-
class
collections.abc.Reversible¶ ABC para classes iteráveis que também fornecem o método
__reversed__().Novo na versão 3.6.
-
class
collections.abc.Generator¶ ABC para classes geradores que implementam o protocolo definido em PEP 342 que estende os iteradores com os métodos
send(),throw()eclose(). Veja também a definição de gerador.Novo na versão 3.5.
-
class
collections.abc.Sequence¶ -
class
collections.abc.MutableSequence¶ -
class
collections.abc.ByteString¶ ABCs para sequências somente de leitura e mutáveis.
Nota de implementação: Alguns dos métodos mixin, como
__iter__(),__reversed__()eindex(), fazem chamadas repetidas para o método subjacente__getitem__(). Consequentemente, se__getitem__()for implementado com velocidade de acesso constante, os métodos mixin terão desempenho linear; no entanto se o método subjacente for linear (como seria com uma lista encadeada), os mixins terão desempenho quadrático e provavelmente precisará ser substituído.Alterado na versão 3.5: O método index() adicionou suporte para os argumentos stop e start.
-
class
collections.abc.Set¶ -
class
collections.abc.MutableSet¶ ABCs para sets somente leitura e mutável.
-
class
collections.abc.Mapping¶ -
class
collections.abc.MutableMapping¶ ABCs para somente leitura e mutável mappings.
-
class
collections.abc.MappingView¶ -
class
collections.abc.ItemsView¶ -
class
collections.abc.KeysView¶ -
class
collections.abc.ValuesView¶ ABCs para mapeamento, itens, chaves e valores views.
-
class
collections.abc.Awaitable¶ ABC para objetos aguardáveis, que podem ser usados em expressões de
await. Implementações personalizadas devem fornecer o método__await__().Objetos e instâncias de corrotina da ABC
Coroutinesão todas instâncias dessa ABC.Nota
No CPython, as corrotinas baseados em gerador (geradoras decorados com
types.coroutine()ouasyncio.coroutine()) são awaitables, embora não possuam o método__await__(). Usarisinstance(gencoro, Awaitable)para eles retornaráFalse. Useinspect.isawaitable()para detectá-los.Novo na versão 3.5.
-
class
collections.abc.Coroutine¶ ABC para classes compatíveis com corrotina. Eles implementam os seguintes métodos, definidos em Objetos corrotina:
send(),throw(), eclose(). Implementações personalizadas também devem implementar__await__(). Todas as instânciasCoroutinetambém são instâncias deAwaitable. Veja também a definição de corrotina.Nota
Em CPython, as corrotinas baseadas em gerador (geradores decorados com
types.coroutine()ouasyncio.coroutine()) são awaitables, embora não possuam o método__await__(). Usarisinstance(gencoro, Coroutine)para eles retornaráFalse. Useinspect.isawaitable()para detectá-los.Novo na versão 3.5.
-
class
collections.abc.AsyncIterable¶ ABC para classes que fornecem o método
__aiter__. Veja também a definição de iterável assíncrono.Novo na versão 3.5.
-
class
collections.abc.AsyncIterator¶ ABC para classes que fornecem os métodos
__aiter__e__anext__. Veja também a definição de iterador assíncrono.Novo na versão 3.5.
-
class
collections.abc.AsyncGenerator¶ ABC para classes de gerador assíncrono que implementam o protocolo definido em PEP 525 e PEP 492.
Novo na versão 3.6.
Esses ABCs nos permitem perguntar a classes ou instâncias se elas fornecem funcionalidades específicas, por exemplo:
size = None
if isinstance(myvar, collections.abc.Sized):
size = len(myvar)
Vários ABCS também são também úteis como mixins que facilitam o desenvolvimento de classes que suportam APIs de contêiner. Por exemplo, para escrever uma classe que suporte toda a API Set , é necessário fornecer apenas os três métodos abstratos subjacentes: __contains__(), __iter__(), e __len__(). O ABC fornece os métodos restantes, como __and__() e 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
Notas sobre o uso de Set e MutableSet como um mixin:
Como algumas operações de conjunto criam novos conjuntos, os métodos de mixin padrão precisam de uma maneira de criar novas instâncias a partir de uma iterável. Supõe-se que a classe construtor tenha uma assinatura no formato
ClassName(iterable). Essa suposição é fatorada em um método de classe interno chamado:_from_iterable()que chamacls(iterable)para produzir um novo conjunto. Se o mixinSetestiver sendo usado em uma classe com uma assinatura de construtor diferente, você precisará substituir_from_iterable()por um método de classe que possa construir novas instâncias a partir de um argumento iterável.Para substituir as comparações (presumivelmente para velocidade, já que a semântica é fixa), redefina
__le__()e__ge__(), então as outras operações seguirão o exemplo automaticamente.O mixin
Setfornece um método_hash()para calcular um valor de hash para o conjunto; no entanto,__hash__()não pe definido porque nem todos os conjuntos são encadeados ou imutáveis. Para adicionar capacidade de encadeamento em conjuntos usando mixin, herde de ambosSet()eHashable(), e então defina__hash__ = Set._hash.
Ver também
OrderedSet receita para um exemplo baseado em
MutableSet.Para mais informações sobre ABCs, consulte o módulo
abce PEP 3119.