Документация Python неофициальный перевод

object.md

340 строк · 34.4 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.8/c-api/object.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Протокол объектов89**[PyObject](https://python-all.ru/3.8/c-api/structures.html#c.PyObject)\* `Py_NotImplemented`**1011Синглтон `NotImplemented`, используемый для указания, что операция не реализована для данной комбинации типов.1213**`Py_RETURN_NOTIMPLEMENTED`**1415Правильно обрабатывает возврат [`Py_NotImplemented`](https://python-all.ru/3.8/c-api/object.html#c.Py_NotImplemented) из C-функции (то есть увеличивает счётчик ссылок NotImplemented и возвращает его).1617#### `int PyObject_Print(PyObject *o, FILE *fp, int flags)`1819Выводит объект *o* в файл *fp*. В случае ошибки возвращает `-1`. Аргумент flags используется для включения определённых параметров вывода. Единственный поддерживаемый в настоящее время параметр – `Py_PRINT_RAW`; если он указан, записывается [`str()`](https://python-all.ru/3.8/library/stdtypes.html#str) объекта вместо [`repr()`](https://python-all.ru/3.8/library/functions.html#repr).2021#### `int PyObject_HasAttr(PyObject *o, PyObject *attr_name)`2223Возвращает `1`, если *o* имеет атрибут *attr\_name*, и `0` в противном случае. Это эквивалентно выражению Python `hasattr(o, attr_name)`. Эта функция всегда завершается успешно.2425Обратите внимание, что исключения, возникающие при вызове методов [`__getattr__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__getattr__) и [`__getattribute__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__getattribute__), подавляются. Для получения сообщений об ошибках используйте вместо этого [`PyObject_GetAttr()`](https://python-all.ru/3.8/c-api/object.html#c.PyObject_GetAttr).2627#### `int PyObject_HasAttrString(PyObject *o, const char *attr_name)`2829Возвращает `1`, если *o* имеет атрибут *attr\_name*, и `0` в противном случае. Это эквивалентно выражению Python `hasattr(o, attr_name)`. Эта функция всегда завершается успешно.3031Обратите внимание, что исключения, возникающие при вызове методов [`__getattr__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__getattr__) и [`__getattribute__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__getattribute__) и при создании временного строкового объекта, подавляются. Для получения сообщений об ошибках используйте вместо этого [`PyObject_GetAttrString()`](https://python-all.ru/3.8/c-api/object.html#c.PyObject_GetAttrString).3233#### `PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name)`3435*Возвращаемое значение: новая ссылка.*3637Извлекает атрибут с именем *attr\_name* из объекта *o*. Возвращает значение атрибута в случае успеха или `NULL` в случае ошибки. Это эквивалентно выражению Python `o.attr_name`.3839#### `PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name)`4041*Возвращаемое значение: новая ссылка.*4243Извлекает атрибут с именем *attr\_name* из объекта *o*. Возвращает значение атрибута в случае успеха или `NULL` при неудаче. Это эквивалент выражения Python `o.attr_name`.4445#### `PyObject* PyObject_GenericGetAttr(PyObject *o, PyObject *name)`4647*Возвращаемое значение: новая ссылка.*4849Обобщённая функция получения атрибута, предназначенная для размещения в слоте `tp_getattro` объекта типа. Она ищет дескриптор в словаре классов в MRO объекта, а также атрибут в [`__dict__`](https://python-all.ru/3.8/library/stdtypes.html#object.__dict__) объекта (если он есть). Как описано в [Реализация дескрипторов](https://python-all.ru/3.8/reference/datamodel.html#descriptors), дескрипторы данных имеют приоритет над атрибутами экземпляра, а дескрипторы не данных – нет. В противном случае вызывается [`AttributeError`](https://python-all.ru/3.8/library/exceptions.html#AttributeError).5051#### `int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)`5253Устанавливает значение атрибута с именем *attr\_name* для объекта *o* равным значению *v*. В случае ошибки возбуждает исключение и возвращает `-1`; при успехе возвращает `0`. Это эквивалент инструкции Python `o.attr_name = v`.5455Если *v* равно `NULL`, атрибут удаляется, однако эта возможность устарела в пользу использования [`PyObject_DelAttr()`](https://python-all.ru/3.8/c-api/object.html#c.PyObject_DelAttr).5657#### `int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)`5859Устанавливает значение атрибута с именем *attr\_name* для объекта *o* равным значению *v*. В случае ошибки возбуждает исключение и возвращает `-1`; при успехе возвращает `0`. Это эквивалент инструкции Python `o.attr_name = v`.6061Если *v* равно `NULL`, атрибут удаляется, однако эта возможность устарела в пользу использования [`PyObject_DelAttrString()`](https://python-all.ru/3.8/c-api/object.html#c.PyObject_DelAttrString).6263#### `int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)`6465Универсальная функция установки и удаления атрибута, предназначенная для помещения в слот [`tp_setattro`](https://python-all.ru/3.8/c-api/typeobj.html#c.PyTypeObject.tp_setattro) объекта типа. Она ищет дескриптор данных в словаре классов в MRO объекта, и если он найден, то приоритет имеет установка или удаление атрибута в словаре экземпляра. В противном случае атрибут устанавливается или удаляется в [`__dict__`](https://python-all.ru/3.8/library/stdtypes.html#object.__dict__) объекта (если он есть). При успехе возвращается `0`, иначе возбуждается [`AttributeError`](https://python-all.ru/3.8/library/exceptions.html#AttributeError) и возвращается `-1`.6667#### `int PyObject_DelAttr(PyObject *o, PyObject *attr_name)`6869Удаляет атрибут с именем *attr\_name* у объекта *o*. При ошибке возвращает `-1`. Это эквивалент инструкции Python `del o.attr_name`.7071#### `int PyObject_DelAttrString(PyObject *o, const char *attr_name)`7273Удаляет атрибут с именем *attr\_name* у объекта *o*. При ошибке возвращает `-1`. Это эквивалент инструкции Python `del o.attr_name`.7475#### `PyObject* PyObject_GenericGetDict(PyObject *o, void *context)`7677*Возвращаемое значение: новая ссылка.*7879Универсальная реализация геттера дескриптора `__dict__`. При необходимости создаёт словарь.8081Новое в версии 3.3.8283#### `int PyObject_GenericSetDict(PyObject *o, PyObject *value, void *context)`8485Универсальная реализация сеттера дескриптора `__dict__`. Эта реализация не позволяет удалять словарь.8687Новое в версии 3.3.8889#### `PyObject* PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)`9091*Возвращаемое значение: новая ссылка.*9293Сравнивает значения *o1* и *o2* с помощью операции, заданной *opid*, которая должна быть одной из `Py_LT`, `Py_LE`, `Py_EQ`, `Py_NE`, `Py_GT` или `Py_GE`, соответствующих `<`, `<=`, `==`, `!=`, `>` или `>=` соответственно. Это эквивалент выражения Python `o1 op o2`, где `op` – оператор, соответствующий *opid*. При успехе возвращает результат сравнения, при ошибке – `NULL`.9495#### `int PyObject_RichCompareBool(PyObject *o1, PyObject *o2, int opid)`9697Сравнивает значения *o1* и *o2* с помощью операции, заданной в *opid*, которая должна быть одной из `Py_LT`, `Py_LE`, `Py_EQ`, `Py_NE`, `Py_GT` или `Py_GE`, соответствующих `<`, `<=`, `==`, `!=`, `>` или `>=` соответственно. Возвращает `-1` в случае ошибки, `0` если результат ложный, `1` в противном случае. Это эквивалент выражения Python `o1 op o2`, где `op` – оператор, соответствующий *opid*.9899> **Примечание**100>101> Если *o1* и *o2* – один и тот же объект, [`PyObject_RichCompareBool()`](https://python-all.ru/3.8/c-api/object.html#c.PyObject_RichCompareBool) всегда будет возвращать `1` для `Py_EQ` и `0` для `Py_NE`.102103#### `PyObject* PyObject_Repr(PyObject *o)`104105*Возвращаемое значение: новая ссылка.*106107Вычисляет строковое представление объекта *o*. Возвращает строковое представление в случае успеха и `NULL` при неудаче. Это эквивалент выражения Python `repr(o)`. Вызывается встроенной функцией [`repr()`](https://python-all.ru/3.8/library/functions.html#repr).108109Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, помогающее гарантировать, что она не игнорирует активное исключение без уведомления.110111#### `PyObject* PyObject_ASCII(PyObject *o)`112113*Возвращаемое значение: новая ссылка.*114115Как и [`PyObject_Repr()`](https://python-all.ru/3.8/c-api/object.html#c.PyObject_Repr), вычисляет строковое представление объекта *o*, но экранирует не-ASCII символы в строке, возвращаемой [`PyObject_Repr()`](https://python-all.ru/3.8/c-api/object.html#c.PyObject_Repr), с помощью управляющих последовательностей `\x`, `\u` или `\U`. Это создаёт строку, похожую на ту, что возвращается [`PyObject_Repr()`](https://python-all.ru/3.8/c-api/object.html#c.PyObject_Repr) в Python 2. Вызывается встроенной функцией [`ascii()`](https://python-all.ru/3.8/library/functions.html#ascii).116117#### `PyObject* PyObject_Str(PyObject *o)`118119*Возвращаемое значение: новая ссылка.*120121Вычисляет строковое представление объекта *o*. Возвращает строковое представление в случае успеха и `NULL` при неудаче. Это эквивалент выражения Python `str(o)`. Вызывается встроенной функцией [`str()`](https://python-all.ru/3.8/library/stdtypes.html#str) и, следовательно, функцией [`print()`](https://python-all.ru/3.8/library/functions.html#print).122123Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, помогающее гарантировать, что она не игнорирует активное исключение без уведомления.124125#### `PyObject* PyObject_Bytes(PyObject *o)`126127*Возвращаемое значение: новая ссылка.*128129Вычисляет байтовое представление объекта *o*. При неудаче возвращается `NULL`, а при успехе – объект bytes. Это эквивалентно выражению Python `bytes(o)`, когда *o* не является целым числом. В отличие от `bytes(o)`, возникает TypeError, когда *o* является целым числом вместо объекта bytes, инициализированного нулями.130131#### `int PyObject_IsSubclass(PyObject *derived, PyObject *cls)`132133Возвращает `1`, если класс *derived* идентичен классу *cls* или является его подклассом, иначе возвращает `0`. В случае ошибки возвращает `-1`.134135Если *cls* является кортежем, проверка будет выполняться для каждого элемента в *cls*. Результатом будет `1`, если хотя бы одна из проверок вернёт `1`, иначе `0`.136137Если у *cls* есть метод [`__subclasscheck__()`](https://python-all.ru/3.8/reference/datamodel.html#class.__subclasscheck__), он будет вызван для определения статуса подкласса, как описано в [**PEP 3119**](https://python-all.ru/3.8/c-api/object.html). В противном случае *derived* является подклассом *cls*, если он является прямым или косвенным подклассом, т.е. содержится в `cls.__mro__`.138139Обычно в качестве классов рассматриваются только объекты классов, т.е. экземпляры [`type`](https://python-all.ru/3.8/library/functions.html#type) или производного класса. Однако объекты могут переопределить это, имея атрибут `__bases__` (который должен быть кортежем базовых классов).140141#### `int PyObject_IsInstance(PyObject *inst, PyObject *cls)`142143Возвращает `1`, если *inst* является экземпляром класса *cls* или подкласса *cls*, или `0`, если нет. При ошибке возвращает `-1` и устанавливает исключение.144145Если *cls* является кортежем, проверка будет выполняться для каждого элемента в *cls*. Результатом будет `1`, если хотя бы одна из проверок вернёт `1`, иначе `0`.146147Если у *cls* есть метод [`__instancecheck__()`](https://python-all.ru/3.8/reference/datamodel.html#class.__instancecheck__), он будет вызван для определения статуса подкласса, как описано в [**PEP 3119**](https://python-all.ru/3.8/c-api/object.html). В противном случае *inst* является экземпляром *cls*, если его класс является подклассом *cls*.148149Экземпляр *inst* может переопределить то, что считается его классом, с помощью атрибута `__class__`.150151Объект *cls* может переопределить, считается ли он классом и каковы его базовые классы, с помощью атрибута `__bases__` (который должен быть кортежем базовых классов).152153#### `int PyCallable_Check(PyObject *o)`154155Определяет, является ли объект *o* вызываемым. Возвращает `1`, если объект вызываем, и `0` в противном случае. Эта функция всегда завершается успешно.156157#### `PyObject* PyObject_Call(PyObject *callable, PyObject *args, PyObject *kwargs)`158159*Возвращаемое значение: новая ссылка.*160161Вызывает вызываемый объект Python *callable* с аргументами, заданными кортежем *args*, и именованными аргументами, заданными словарём *kwargs*.162163*args* не должен быть `NULL`, используйте пустой кортеж, если аргументы не требуются. Если именованные аргументы не нужны, *kwargs* может быть `NULL`.164165Возвращает результат вызова в случае успеха или возбуждает исключение и возвращает `NULL` в случае неудачи.166167Это эквивалент выражения Python: `callable(*args, **kwargs)`.168169#### `PyObject* PyObject_CallObject(PyObject *callable, PyObject *args)`170171*Возвращаемое значение: новая ссылка.*172173Вызывает вызываемый объект Python *callable* с аргументами, заданными кортежем *args*. Если аргументы не нужны, *args* может быть `NULL`.174175Возвращает результат вызова в случае успеха или возбуждает исключение и возвращает `NULL` в случае неудачи.176177Это эквивалент выражения Python: `callable(*args)`.178179#### `PyObject* PyObject_CallFunction(PyObject *callable, const char *format, ...)`180181*Возвращаемое значение: новая ссылка.*182183Вызывает вызываемый объект Python *callable* с переменным числом аргументов C. Аргументы C описываются строкой форматирования в стиле [`Py_BuildValue()`](https://python-all.ru/3.8/c-api/arg.html#c.Py_BuildValue). Формат может быть `NULL`, что означает отсутствие аргументов.184185Возвращает результат вызова в случае успеха или возбуждает исключение и возвращает `NULL` в случае неудачи.186187Это эквивалент выражения Python: `callable(*args)`.188189Обратите внимание: если передаются только аргументы [`PyObject *`](https://python-all.ru/3.8/c-api/structures.html#c.PyObject), то [`PyObject_CallFunctionObjArgs()`](https://python-all.ru/3.8/c-api/object.html#c.PyObject_CallFunctionObjArgs) – более быстрая альтернатива.190191Изменено в версии 3.4: Тип *format* был изменён с `char *`.192193#### `PyObject* PyObject_CallMethod(PyObject *obj, const char *name, const char *format, ...)`194195*Возвращаемое значение: новая ссылка.*196197Вызывает метод *name* объекта *obj* с переменным числом аргументов C. Аргументы C описываются строкой форматирования [`Py_BuildValue()`](https://python-all.ru/3.8/c-api/arg.html#c.Py_BuildValue), которая должна создавать кортеж.198199Формат может быть `NULL`, что означает, что аргументы не предоставляются.200201Возвращает результат вызова в случае успеха, или возбуждает исключение и возвращает `NULL` в случае неудачи.202203Это эквивалент выражения Python: `obj.name(arg1, arg2, ...)`.204205Обратите внимание: если передаются только аргументы [`PyObject *`](https://python-all.ru/3.8/c-api/structures.html#c.PyObject), то [`PyObject_CallMethodObjArgs()`](https://python-all.ru/3.8/c-api/object.html#c.PyObject_CallMethodObjArgs) – более быстрая альтернатива.206207Изменено в версии 3.4: Типы *name* и *format* были изменены с `char *`.208209#### `PyObject* PyObject_CallFunctionObjArgs(PyObject *callable, ...)`210211*Возвращаемое значение: новая ссылка.*212213Вызывает вызываемый объект Python *callable* с переменным количеством аргументов [`PyObject*`](https://python-all.ru/3.8/c-api/structures.html#c.PyObject). Аргументы передаются как переменное количество параметров, за которыми следует `NULL`.214215Возвращает результат вызова в случае успеха, или возбуждает исключение и возвращает `NULL` в случае неудачи.216217Это эквивалент выражения Python: `callable(arg1, arg2, ...)`.218219#### `PyObject* PyObject_CallMethodObjArgs(PyObject *obj, PyObject *name, ...)`220221*Возвращаемое значение: новая ссылка.*222223Вызывает метод объекта Python *obj*, имя которого задаётся как объект строки Python в *name*. Он вызывается с переменным количеством аргументов [`PyObject*`](https://python-all.ru/3.8/c-api/structures.html#c.PyObject). Аргументы передаются как переменное количество параметров, за которыми следует `NULL`.224225Возвращает результат вызова в случае успеха, или возбуждает исключение и возвращает `NULL` в случае неудачи.226227#### `PyObject* _PyObject_Vectorcall(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwnames)`228229Вызывает вызываемый объект Python *callable*, используя [`vectorcall`](https://python-all.ru/3.8/c-api/typeobj.html#c.PyTypeObject.tp_vectorcall_offset), если это возможно.230231*args* – это C-массив с позиционными аргументами.232233*nargsf* – это количество позиционных аргументов плюс опционально флаг `PY_VECTORCALL_ARGUMENTS_OFFSET` (см. ниже). Чтобы получить фактическое количество аргументов, используйте [`PyVectorcall_NARGS(nargsf)`](https://python-all.ru/3.8/c-api/object.html#c.PyVectorcall_NARGS).234235*kwnames* может быть либо `NULL` (без именованных аргументов), либо кортежем имен ключевых слов. В последнем случае значения именованных аргументов хранятся в *args* после позиционных аргументов. Количество именованных аргументов не влияет на *nargsf*.236237*kwnames* должен содержать только объекты типа `str` (не подкласса), и все ключи должны быть уникальными.238239Возвращает результат вызова в случае успеха, или возбуждает исключение и возвращает `NULL` в случае неудачи.240241Для этого используется протокол vectorcall, если вызываемый объект его поддерживает; в противном случае аргументы преобразуются для использования [`tp_call`](https://python-all.ru/3.8/c-api/typeobj.html#c.PyTypeObject.tp_call).242243> **Примечание**244>245> Эта функция является временной и ожидается, что она станет публичной в Python 3.9, с другим именем и, возможно, изменённой семантикой. Если вы используете эту функцию, планируйте обновление своего кода для Python 3.9.246247Новое в версии 3.8.248249**`PY_VECTORCALL_ARGUMENTS_OFFSET`**250251Если установлен в аргументе vectorcall *nargsf*, вызываемому объекту разрешается временно изменять `args[-1]`. Другими словами, *args* указывает на аргумент 1 (не 0) в выделенном векторе. Вызываемый объект должен восстановить значение `args[-1]` перед возвратом.252253Когда это можно сделать дёшево (без дополнительного выделения памяти), вызывающие стороны рекомендуется использовать `PY_VECTORCALL_ARGUMENTS_OFFSET`. Это позволит таким вызываемым объектам, как связанные методы, выполнять свои последующие вызовы (которые включают предварительно добавленный аргумент *self*) дёшево.254255Новое в версии 3.8.256257#### `Py_ssize_t PyVectorcall_NARGS(size_t nargsf)`258259Получив аргумент vectorcall *nargsf*, возвращает фактическое количество аргументов. В настоящее время эквивалентно `nargsf & ~PY_VECTORCALL_ARGUMENTS_OFFSET`.260261Новое в версии 3.8.262263#### `PyObject* _PyObject_FastCallDict(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwdict)`264265То же, что и [`_PyObject_Vectorcall()`](https://python-all.ru/3.8/c-api/object.html#c._PyObject_Vectorcall), за исключением того, что именованные аргументы передаются как словарь в *kwdict*. Это может быть `NULL`, если нет именованных аргументов.266267Для вызываемых объектов, поддерживающих [`vectorcall`](https://python-all.ru/3.8/c-api/typeobj.html#c.PyTypeObject.tp_vectorcall_offset), аргументы внутренне преобразуются в соглашение vectorcall. Поэтому эта функция добавляет некоторые накладные расходы по сравнению с [`_PyObject_Vectorcall()`](https://python-all.ru/3.8/c-api/object.html#c._PyObject_Vectorcall). Её следует использовать только если вызывающая сторона уже имеет готовый к использованию словарь.268269> **Примечание**270>271> Эта функция является временной и ожидается, что она станет публичной в Python 3.9, с другим именем и, возможно, изменённой семантикой. Если вы используете эту функцию, планируйте обновление своего кода для Python 3.9.272273Новое в версии 3.8.274275#### `Py_hash_t PyObject_Hash(PyObject *o)`276277Вычисляет и возвращает хеш-значение объекта *o*. При неудаче возвращает `-1`. Это эквивалент выражения Python `hash(o)`.278279Изменено в версии 3.2: Тип возвращаемого значения теперь Py\_hash\_t. Это знаковое целое того же размера, что и Py\_ssize\_t.280281#### `Py_hash_t PyObject_HashNotImplemented(PyObject *o)`282283Устанавливает [`TypeError`](https://python-all.ru/3.8/library/exceptions.html#TypeError), указывающий, что `type(o)` не хешируется, и возвращает `-1`. Эта функция получает особую обработку при сохранении в слоте `tp_hash`, позволяя типу явно указать интерпретатору, что он не хешируется.284285#### `int PyObject_IsTrue(PyObject *o)`286287Возвращает `1`, если объект *o* считается истинным, и `0` в противном случае. Эквивалентно выражению Python `not not o`. При неудаче возвращает `-1`.288289#### `int PyObject_Not(PyObject *o)`290291Возвращает `0`, если объект *o* считается истинным, и `1` в противном случае. Эквивалентно выражению Python `not o`. При неудаче возвращает `-1`.292293#### `PyObject* PyObject_Type(PyObject *o)`294295*Возвращаемое значение: новая ссылка.*296297Когда *o* не равен `NULL`, возвращает объект типа, соответствующий типу объекта *o*. В случае неудачи возбуждает [`SystemError`](https://python-all.ru/3.8/library/exceptions.html#SystemError) и возвращает `NULL`. Это эквивалентно выражению Python `type(o)`. Эта функция увеличивает счётчик ссылок возвращаемого значения. Нет реальной причины использовать эту функцию вместо обычного выражения `o->ob_type`, которое возвращает указатель типа [`PyTypeObject*`](https://python-all.ru/3.8/c-api/type.html#c.PyTypeObject), за исключением случаев, когда требуется увеличенный счётчик ссылок.298299#### `int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)`300301Возвращает true, если объект *o* имеет тип *type* или является подтипом *type*. Оба параметра должны быть не-`NULL`.302303#### `Py_ssize_t PyObject_Size(PyObject *o)`304305#### `Py_ssize_t PyObject_Length(PyObject *o)`306307Возвращает длину объекта *o*. Если объект *o* предоставляет протоколы последовательности и отображения, возвращается длина последовательности. При ошибке возвращается `-1`. Эквивалентно выражению Python `len(o)`.308309#### `Py_ssize_t PyObject_LengthHint(PyObject *o, Py_ssize_t default)`310311Возвращает оценочную длину объекта *o*. Сначала пытается вернуть его фактическую длину, затем оценку с помощью [`__length_hint__()`](https://python-all.ru/3.8/reference/datamodel.html#object.__length_hint__), и в итоге возвращает значение по умолчанию. При ошибке возвращает `-1`. Эквивалентно выражению Python `operator.length_hint(o, default)`.312313Новое в версии 3.4.314315#### `PyObject* PyObject_GetItem(PyObject *o, PyObject *key)`316317*Возвращаемое значение: новая ссылка.*318319Возвращает элемент *o*, соответствующий объекту *key*, или `NULL` при неудаче. Эквивалентно выражению Python `o[key]`.320321#### `int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)`322323Сопоставляет объекту *key* значение *v*. Возбуждает исключение и возвращает `-1` при неудаче; возвращает `0` в случае успеха. Эквивалентно инструкции Python `o[key] = v`. Эта функция *не* крадёт ссылку на *v*.324325#### `int PyObject_DelItem(PyObject *o, PyObject *key)`326327Удаляет сопоставление для объекта *key* из объекта *o*. Возвращает `-1` при неудаче. Эквивалентно инструкции Python `del o[key]`.328329#### `PyObject* PyObject_Dir(PyObject *o)`330331*Возвращаемое значение: новая ссылка.*332333Эквивалентно выражению Python `dir(o)`, возвращает (возможно пустой) список строк, подходящих для аргумента-объекта, или `NULL`, если произошла ошибка. Если аргумент равен `NULL`, это похоже на `dir()` в Python, возвращает имена текущих локальных переменных; в этом случае, если нет активного фрейма выполнения, возвращается `NULL`, но [`PyErr_Occurred()`](https://python-all.ru/3.8/c-api/exceptions.html#c.PyErr_Occurred) вернёт false.334335#### `PyObject* PyObject_GetIter(PyObject *o)`336337*Возвращаемое значение: новая ссылка.*338339Эквивалентно выражению Python `iter(o)`. Возвращает новый итератор для аргумента-объекта, или сам объект, если объект уже является итератором. Возбуждает [`TypeError`](https://python-all.ru/3.8/library/exceptions.html#TypeError) и возвращает `NULL`, если объект не может быть итерирован.340