> **Источник:** https://python-all.ru/3.11/c-api/mapping.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# Протокол отображения

См. также [`PyObject_GetItem()`](https://python-all.ru/3.11/c-api/object.html#c.PyObject_GetItem), [`PyObject_SetItem()`](https://python-all.ru/3.11/c-api/object.html#c.PyObject_SetItem) и [`PyObject_DelItem()`](https://python-all.ru/3.11/c-api/object.html#c.PyObject_DelItem).

#### `int PyMapping_Check(PyObject *o)`

*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*

Возвращает `1`, если объект предоставляет протокол отображения или поддерживает срезы, и `0` в противном случае. Обратите внимание, что возвращает `1` для классов Python с методом [`__getitem__()`](https://python-all.ru/3.11/reference/datamodel.html#object.__getitem__), поскольку в общем случае невозможно определить, какой тип ключей поддерживает класс. Эта функция всегда завершается успешно.

#### `Py_ssize_t PyMapping_Size(PyObject *o)`

#### `Py_ssize_t PyMapping_Length(PyObject *o)`

*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*

В случае успеха возвращает количество ключей в объекте *o*, а в случае ошибки – `-1`. Это эквивалентно выражению Python `len(o)`.

#### `PyObject *PyMapping_GetItemString(PyObject *o, const char *key)`

*Возвращаемое значение: новая ссылка.*

*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*

То же, что и [`PyObject_GetItem()`](https://python-all.ru/3.11/c-api/object.html#c.PyObject_GetItem), но *key* задаётся как const char\* строка байтов в кодировке UTF-8, а не как [PyObject](https://python-all.ru/3.11/c-api/structures.html#c.PyObject)\*.

#### `int PyMapping_SetItemString(PyObject *o, const char *key, PyObject *v)`

*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*

То же, что и [`PyObject_SetItem()`](https://python-all.ru/3.11/c-api/object.html#c.PyObject_SetItem), но *key* задаётся как const char\* строка байтов в кодировке UTF-8, а не как [PyObject](https://python-all.ru/3.11/c-api/structures.html#c.PyObject)\*.

#### `int PyMapping_DelItem(PyObject *o, PyObject *key)`

Это псевдоним [`PyObject_DelItem()`](https://python-all.ru/3.11/c-api/object.html#c.PyObject_DelItem).

#### `int PyMapping_DelItemString(PyObject *o, const char *key)`

То же, что и [`PyObject_DelItem()`](https://python-all.ru/3.11/c-api/object.html#c.PyObject_DelItem), но *key* задаётся как const char\* строка байтов в кодировке UTF-8, а не как [PyObject](https://python-all.ru/3.11/c-api/structures.html#c.PyObject)\*.

#### `int PyMapping_HasKey(PyObject *o, PyObject *key)`

*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*

Возвращает `1`, если объект отображения имеет ключ *key*, и `0` в противном случае. Это эквивалентно выражению Python `key in o`. Эта функция всегда завершается успешно.

> **Примечание**
>
> Исключения, возникающие при вызове метода [`__getitem__()`](https://python-all.ru/3.11/reference/datamodel.html#object.__getitem__), молча игнорируются. Для корректной обработки ошибок используйте [`PyObject_GetItem()`](https://python-all.ru/3.11/c-api/object.html#c.PyObject_GetItem).

#### `int PyMapping_HasKeyString(PyObject *o, const char *key)`

*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*

То же, что и [`PyMapping_HasKey()`](https://python-all.ru/3.11/c-api/mapping.html#c.PyMapping_HasKey), но *key* задаётся как const char\* строка байтов в кодировке UTF-8, а не как [PyObject](https://python-all.ru/3.11/c-api/structures.html#c.PyObject)\*.

> **Примечание**
>
> Исключения, возникающие при вызове метода [`__getitem__()`](https://python-all.ru/3.11/reference/datamodel.html#object.__getitem__) или при создании временного объекта [`str`](https://python-all.ru/3.11/library/stdtypes.html#str), молча игнорируются. Для корректной обработки ошибок используйте [`PyMapping_GetItemString()`](https://python-all.ru/3.11/c-api/mapping.html#c.PyMapping_GetItemString).

#### `PyObject *PyMapping_Keys(PyObject *o)`

*Возвращаемое значение: новая ссылка.*

*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*

В случае успеха возвращает список ключей в объекте *o*. В случае ошибки возвращает `NULL`.

Изменено в версии 3.7: Ранее функция возвращала список или кортеж.

#### `PyObject *PyMapping_Values(PyObject *o)`

*Возвращаемое значение: новая ссылка.*

*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*

В случае успеха возвращает список значений в объекте *o*. В случае ошибки возвращает `NULL`.

Изменено в версии 3.7: Ранее функция возвращала список или кортеж.

#### `PyObject *PyMapping_Items(PyObject *o)`

*Возвращаемое значение: новая ссылка.*

*Часть [Stable ABI](https://python-all.ru/3.11/c-api/stable.html#stable).*

В случае успеха возвращает список элементов объекта *o*, где каждый элемент – это кортеж, содержащий пару ключ-значение. В случае неудачи возвращает `NULL`.

Изменено в версии 3.7: Ранее функция возвращала список или кортеж.
