Сообщить об ошибке.

Типизация абстрактных базовых классов

Рассмотренные здесь типы аннотаций абстрактных базовых классов соответствуют встроенным коллекциям, представленным в модуле collections.abc.

С версии Python 3.9 для всех рассмотренных типов аннотаций не рекомендован импорт из модуля typing, так как теперь collections.abc. поддерживает синтаксис аннотации []. Смотрите GenericAlias.

Типы аннотаций абстрактных базовых классов:


typing.AbstractSet(Sized, Collection[T_co]):

Класс typing.AbstractSet() общая версия абстрактного базового класса collections.abc.Set.

Устарело с Python 3.9: теперь collections.abc.Set поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.ByteString(Sequence[int]):

Класс typing.ByteString() общая версия абстрактного базового класса collections.abc.ByteString.

Этот тип представляет типы bytes, bytearray, и memoryview.

В качестве сокращения для этого типа, bytes могут использоваться для аннотирования аргументов любого из упомянутых выше типов.

Устарело с Python 3.9: теперь collections.abc.ByteString поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.Collection(Sized, Iterable[T_co], Container[T_co]):

Класс typing.Collection() общая версия абстрактного базового класса collections.abc.Collection.

Новое в Python 3.6.0.

Устарело с Python 3.9: теперь collections.abc.Collection поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.Container(Generic[T_co]):

Класс typing.Container() общая версия абстрактного базового класса collections.abc.Container.

Устарело с Python 3.9: теперь collections.abc.Container поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.ItemsView(MappingView, Generic[KT_co, VT_co]):

Класс typing.ItemsView() общая версия абстрактного базового класса collections.abc.ItemsView.

Устарело с Python 3.9: теперь collections.abc.ItemsView поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.KeysView(MappingView[KT_co], AbstractSet[KT_co]):

Класс typing.KeysView() общая версия абстрактного базового класса collections.abc.KeysView.

Устарело с Python 3.9: теперь collections.abc.KeysView поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.Mapping(Sized, Collection[KT], Generic[VT_co]):

Класс typing.Mapping() общая версия абстрактного базового класса collections.abc.Mapping.

Этот тип можно использовать следующим образом:

def get_position_in_index(word_list: Mapping[str, int], word: str) -> int:
    return word_list[word]

Устарело с Python 3.9: теперь collections.abc.Mapping поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.MappingView(Sized, Iterable[T_co]):

Класс typing.MappingView() общая версия абстрактного базового класса collections.abc.MappingView.

Устарело с Python 3.9: теперь collections.abc.MappingView поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.MutableMapping(Mapping[KT, VT]):

Класс typing.MutableMapping() общая версия абстрактного базового класса collections.abc.MutableMapping.

Устарело с Python 3.9: теперь collections.abc.MutableMapping поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.MutableSequence(Sequence[T]):

Класс typing.MutableSequence() общая версия абстрактного базового класса collections.abc.MutableSequence.

Устарело с Python 3.9: теперь collections.abc.MutableSequence поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.MutableSet(AbstractSet[T]):

Класс typing.MutableSet() общая версия абстрактного базового класса collections.abc.MutableSet.

Устарело с Python 3.9: теперь collections.abc.MutableSet поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.Sequence(Reversible[T_co], Collection[T_co]):

Класс typing.Sequence() общая версия абстрактного базового класса collections.abc.Sequence.

Устарело с Python 3.9: теперь collections.abc.Sequence поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.ValuesView(MappingView[VT_co]):

Класс typing.ValuesView() общая версия абстрактного базового класса collections.abc.ValuesView.

Устарело с Python 3.9: теперь collections.abc.ValuesView поддерживает синтаксис аннотации []. Смотрите GenericAlias.

Corresponding to other types in collections.abc

typing.Iterable(Generic[T_co]):

Класс typing.Iterable() общая версия абстрактного базового класса collections.abc.Iterable.

Устарело с Python 3.9: теперь collections.abc.Iterable поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.Iterator(Iterable[T_co]):

Класс typing.Iterator() общая версия абстрактного базового класса collections.abc.Iterator.

Устарело с Python 3.9: теперь collections.abc.Iterator поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.Generator(Iterator[T_co], Generic[T_co, T_contra, V_co]):

Генератор может быть аннотирован общим типом Generator[YieldType, SendType, ReturnType].

Примеры:

def echo_round() -> Generator[int, float, str]:
    sent = yield 0
    while sent >= 0:
        sent = yield round(sent)
    return 'Done'

Обратите внимание, что в отличие от многих других универсальных шаблонов в модуле typing, SendType генератора ведет себя контравариантно, а не ковариантно или инвариантно.

Если генератор будет выдавать только значения, установите для SendType и ReturnType значение None:

def infinite_stream(start: int) -> Generator[int, None, None]:
    while True:
        yield start
        start += 1

В качестве альтернативы, отметьте генератор как имеющий тип возвращаемого значения Iterable[YieldType] или Iterator[YieldType]:

def infinite_stream(start: int) -> Iterator[int]:
    while True:
        yield start
        start += 1

Устарело с Python 3.9: теперь collections.abc.Generator поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.Hashable:

Атрибут typing.Hashable псевдоним для абстрактного базового класса collections.abc.Hashable.

Устарело с Python 3.12: вместо этого необходимо использовать напрямую Collections.abc.Hashable.

typing.Reversible(Iterable[T_co]):

Класс typing.Reversible() общая версия абстрактного базового класса collections.abc.Reversible.

Устарело с Python 3.9: теперь collections.abc.Reversible поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.Sized:

Атрибут typing.Sized псевдоним для абстрактного базового класса collections.abc.Sized.

Устарело с Python 3.12: вместо этого необходимо использовать напрямую Collections.abc.Sized.

Типы аннотаций для асинхронных программ.

typing.Coroutine(Awaitable[V_co], Generic[T_co, T_contra, V_co]):

Класс typing.Coroutine() общая версия абстрактного базового класса collections.abc.Coroutine.

Варианты и порядок типов переменных соответствуют переменным генератора, например:

from collections.abc import Coroutine
c = None # type: Coroutine[list[str], str, int]
...
x = c.send('hi') # type: list[str]
async def bar() -> None:
    x = await c # type: int

Устарело с Python 3.9: теперь collections.abc.Reversible поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.AsyncGenerator(AsyncIterator[T_co], Generic[T_co, T_contra]):

Асинхронный генератор может быть аннотирован общим типом AsyncGenerator[YieldType, SendType].

Пример:

async def echo_round() -> AsyncGenerator[int, float]:
    sent = yield 0
    while sent >= 0.0:
        rounded = await round(sent)
        sent = yield rounded

В отличие от обычных генераторов, асинхронные генераторы не могут возвращать значение, поэтому параметр типа ReturnType отсутствует. Как и в случае с генератором, SendType ведет себя контравариантно.

Если генератор будет выдавать только значения, установите для параметра SendType значение None:

async def infinite_stream(start: int) -> AsyncGenerator[int, None]:
    while True:
        yield start
        start = await increment(start)

В качестве альтернативы отметьте генератор как имеющий возвращаемый тип AsyncIterable[YieldType] или AsyncIterator[YieldType]:

async def infinite_stream(start: int) -> AsyncIterator[int]:
    while True:
        yield start
        start = await increment(start)

Устарело с Python 3.9: теперь collections.abc.AsyncGenerator поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.AsyncIterable(Generic[T_co]):

Класс typing.AsyncIterable()общая версия абстрактного базового класса collections.abc.AsyncIterable.

Не рекомендуется с Python 3.9: теперь collections.abc.AsyncIterable поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.AsyncIterator(AsyncIterable[T_co]):

Класс typing.AsyncIterator() общая версия абстрактного базового класса collections.abc.AsyncIterator.

Устарело с Python 3.9: теперь collections.abc.AsyncIterator поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.Awaitable(Generic[T_co]):

Класс typing.Awaitable() общая версия абстрактного базового класса collections.abc.Awaitable.

Устарело с Python 3.9: теперь collections.abc.Awaitable поддерживает синтаксис аннотации []. Смотрите GenericAlias.

Типы аннотаций диспетчера контекста

typing.ContextManager(Generic[T_co]):

Класс typing.ContextManager() общая версия абстрактного базового класса collections.AbstractContextManager.

Устарело с Python 3.9: теперь collections.abc.AbstractContextManager поддерживает синтаксис аннотации []. Смотрите GenericAlias.

typing.AsyncContextManager(Generic[T_co]):

Класс typing.AsyncContextManager() общая версия абстрактного базового класса collections.AbstractAsyncContextManager.

Устарело с Python 3.9: теперь collections.abc.AbstractAsyncContextManager поддерживает синтаксис аннотации []. Смотрите GenericAlias.