все Python 3до 3.10collectionsпонятие
collections.Mapping
удалено
Абстрактные классы (Mapping, Sequence, Iterable и др.), доступные прямо из collections. Удалены в Python 3.10 — импортируйте их из collections.abc.
Синтаксис
from collections import Mapping # до 3.10
До Python 3.3 абстрактные классы коллекций лежали прямо в collections. В 3.3 их перенесли в подмодуль collections.abc, чтобы отделить протоколы от конкретных типов вроде deque и Counter, а старые имена оставили псевдонимами; в 3.10 псевдонимы убрали. Касается всех ABC: Mapping, MutableMapping, Sequence, MutableSequence, Set, MutableSet, Iterable, Iterator, Generator, Callable, Hashable, Sized, Container и других. Как переписать: from collections import Mapping → from collections.abc import Mapping; collections.Sequence → collections.abc.Sequence. Конкретные классы (OrderedDict, defaultdict, namedtuple) остаются в collections.
Примеры
# Python 3.10+
try:
from collections import Mapping
except ImportError as e:
print(type(e).__name__) # → ImportError
# Python 3.10+
from collections.abc import Mapping, Sequence, Iterable
print(isinstance({}, Mapping)) # → True
print(isinstance([], Sequence), isinstance('ab', Iterable)) # → True True
from collections import Mapping, Sequence
print(isinstance({}, Mapping), isinstance([], Sequence)) # → True True
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности