Python 3.3+collectionsпонятие
collections.abc.Mapping
collections.abc — протоколы
Протокол неизменяемого отображения ключ→значение (доступ по ключу, len, in).
Синтаксис
isinstance(obj, collections.abc.Mapping)
«Неизменяемое» здесь означает, что протокол не требует записи, а вовсе не то, что объект нельзя менять: обычный dict тоже проходит эту проверку, так что она не защитит вас от изменяемого словаря на входе. Если функции нужна запись, проверяйте MutableMapping. А при наследовании от Mapping достаточно написать __getitem__, __len__ и __iter__ — get, keys, items, values, in и сравнение достанутся бесплатно.
Примеры
import collections.abc as abc
import types
print(isinstance({}, abc.Mapping)) # → True
print(isinstance([1, 2], abc.Mapping)) # → False
print(isinstance({}, abc.MutableMapping)) # → True
print(isinstance(types.MappingProxyType({'a': 1}), abc.Mapping)) # → True
print(isinstance(types.MappingProxyType({'a': 1}), abc.MutableMapping)) # → False
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности