object.md
1> **Источник:** https://python-all.ru/3.12/c-api/object.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Протокол объектов89#### `PyObject *Py_NotImplemented`1011Синглтон `NotImplemented`, используемый для указания, что операция не реализована для данной комбинации типов.1213#### `Py_RETURN_NOTIMPLEMENTED`1415Правильно обрабатывает возврат [`Py_NotImplemented`](https://python-all.ru/3.12/c-api/object.html#c.Py_NotImplemented) из C-функции (то есть создаёт новую [сильную ссылку](https://python-all.ru/3.12/glossary.html#term-strong-reference) на [`NotImplemented`](https://python-all.ru/3.12/library/constants.html#NotImplemented) и возвращает её).1617#### `Py_PRINT_RAW`1819Флаг, используемый с несколькими функциями, выводящими объект (например, [`PyObject_Print()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_Print) и [`PyFile_WriteObject()`](https://python-all.ru/3.12/c-api/file.html#c.PyFile_WriteObject)). Если передан, эти функции будут использовать [`str()`](https://python-all.ru/3.12/library/stdtypes.html#str) объекта вместо [`repr()`](https://python-all.ru/3.12/library/functions.html#repr).2021#### `int PyObject_Print(PyObject *o, FILE *fp, int flags)`2223Выводит объект *o* в файл *fp*. В случае ошибки возвращает `-1`. Аргумент flags используется для включения определённых параметров вывода. Единственный поддерживаемый в настоящее время параметр – [`Py_PRINT_RAW`](https://python-all.ru/3.12/c-api/object.html#c.Py_PRINT_RAW); если он указан, записывается [`str()`](https://python-all.ru/3.12/library/stdtypes.html#str) объекта вместо [`repr()`](https://python-all.ru/3.12/library/functions.html#repr).2425#### `int PyObject_HasAttr(PyObject *o, PyObject *attr_name)`2627*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*2829Возвращает `1`, если *o* имеет атрибут *attr\_name*, и `0` в противном случае. Это эквивалентно выражению Python `hasattr(o, attr_name)`. Эта функция всегда завершается успешно.3031> **Примечание**32>33> Исключения, возникающие при вызове методов [`__getattr__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__getattr__) и [`__getattribute__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__getattribute__), молча игнорируются. Для правильной обработки ошибок используйте [`PyObject_GetAttr()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_GetAttr).3435#### `int PyObject_HasAttrString(PyObject *o, const char *attr_name)`3637*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*3839То же, что и [`PyObject_HasAttr()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_HasAttr), но *attr\_name* задаётся в виде const char\* UTF-8 строки байтов, а не [PyObject](https://python-all.ru/3.12/c-api/structures.html#c.PyObject)\*.4041> **Примечание**42>43> Исключения, возникающие при вызове методов [`__getattr__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__getattr__) и [`__getattribute__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__getattribute__) или при создании временного объекта [`str`](https://python-all.ru/3.12/library/stdtypes.html#str), молча игнорируются. Для правильной обработки ошибок используйте [`PyObject_GetAttrString()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_GetAttrString).4445#### `PyObject *PyObject_GetAttr(PyObject *o, PyObject *attr_name)`4647*Возвращаемое значение: новая ссылка.*4849*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*5051Извлекает атрибут с именем *attr\_name* из объекта *o*. Возвращает значение атрибута в случае успеха или `NULL` в случае ошибки. Это эквивалентно выражению Python `o.attr_name`.5253#### `PyObject *PyObject_GetAttrString(PyObject *o, const char *attr_name)`5455*Возвращаемое значение: новая ссылка.*5657*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*5859То же, что и [`PyObject_GetAttr()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_GetAttr), но *attr\_name* задаётся в виде const char\* UTF-8 строки байтов, а не [PyObject](https://python-all.ru/3.12/c-api/structures.html#c.PyObject)\*.6061#### `PyObject *PyObject_GenericGetAttr(PyObject *o, PyObject *name)`6263*Возвращаемое значение: новая ссылка.*6465*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*6667Обобщённая функция получения атрибута, предназначенная для размещения в слоте `tp_getattro` объекта типа. Она ищет дескриптор в словаре классов в MRO объекта, а также атрибут в [`__dict__`](https://python-all.ru/3.12/reference/datamodel.html#object.__dict__) объекта (если он есть). Как описано в [Реализация дескрипторов](https://python-all.ru/3.12/reference/datamodel.html#descriptors), дескрипторы данных имеют приоритет над атрибутами экземпляра, а дескрипторы не данных – нет. В противном случае вызывается [`AttributeError`](https://python-all.ru/3.12/library/exceptions.html#AttributeError).6869#### `int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)`7071*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*7273Устанавливает значение атрибута с именем *attr\_name* для объекта *o* равным значению *v*. В случае ошибки возбуждает исключение и возвращает `-1`; при успехе возвращает `0`. Это эквивалент инструкции Python `o.attr_name = v`.7475Если *v* равно `NULL`, атрибут удаляется. Такое поведение устарело в пользу использования [`PyObject_DelAttr()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_DelAttr), однако в настоящее время нет планов по его удалению.7677#### `int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)`7879*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*8081То же, что и [`PyObject_SetAttr()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_SetAttr), но *attr\_name* задаётся в виде const char\* UTF-8 строки байтов, а не [PyObject](https://python-all.ru/3.12/c-api/structures.html#c.PyObject)\*.8283Если *v* равно `NULL`, атрибут удаляется, но эта возможность устарела в пользу использования [`PyObject_DelAttrString()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_DelAttrString).8485Количество различных имён атрибутов, передаваемых в эту функцию, должно быть небольшим; обычно для этого используется статически выделенная строка в качестве *attr\_name*. Для имён атрибутов, неизвестных на этапе компиляции, предпочтительнее напрямую вызывать [`PyUnicode_FromString()`](https://python-all.ru/3.12/c-api/unicode.html#c.PyUnicode_FromString) и [`PyObject_SetAttr()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_SetAttr). Подробнее см. [`PyUnicode_InternFromString()`](https://python-all.ru/3.12/c-api/unicode.html#c.PyUnicode_InternFromString), который может использоваться внутри для создания объекта ключа.8687#### `int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)`8889*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*9091Универсальная функция установки и удаления атрибута, предназначенная для помещения в слот [`tp_setattro`](https://python-all.ru/3.12/c-api/typeobj.html#c.PyTypeObject.tp_setattro) объекта типа. Она ищет дескриптор данных в словаре классов в MRO объекта, и если он найден, то приоритет имеет установка или удаление атрибута в словаре экземпляра. В противном случае атрибут устанавливается или удаляется в [`__dict__`](https://python-all.ru/3.12/reference/datamodel.html#object.__dict__) объекта (если он есть). При успехе возвращается `0`, иначе возбуждается [`AttributeError`](https://python-all.ru/3.12/library/exceptions.html#AttributeError) и возвращается `-1`.9293#### `int PyObject_DelAttr(PyObject *o, PyObject *attr_name)`9495Удаляет атрибут с именем *attr\_name* у объекта *o*. При ошибке возвращает `-1`. Это эквивалент инструкции Python `del o.attr_name`.9697#### `int PyObject_DelAttrString(PyObject *o, const char *attr_name)`9899То же, что и [`PyObject_DelAttr()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_DelAttr), но *attr\_name* задаётся в виде const char\* UTF-8 строки байтов, а не [PyObject](https://python-all.ru/3.12/c-api/structures.html#c.PyObject)\*.100101Количество различных имён атрибутов, передаваемых в эту функцию, должно быть небольшим; обычно для этого используется статически выделенная строка в качестве *attr\_name*. Для имён атрибутов, неизвестных на этапе компиляции, предпочтительнее напрямую вызывать [`PyUnicode_FromString()`](https://python-all.ru/3.12/c-api/unicode.html#c.PyUnicode_FromString) и [`PyObject_DelAttr()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_DelAttr). Подробнее см. [`PyUnicode_InternFromString()`](https://python-all.ru/3.12/c-api/unicode.html#c.PyUnicode_InternFromString), который может использоваться внутри для создания объекта ключа для поиска.102103#### `PyObject *PyObject_GenericGetDict(PyObject *o, void *context)`104105*Возвращаемое значение: новая ссылка.*106107*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable) начиная с версии 3.10.*108109Универсальная реализация геттера дескриптора `__dict__`. При необходимости создаёт словарь.110111Эту функцию также можно вызывать для получения [`__dict__`](https://python-all.ru/3.12/reference/datamodel.html#object.__dict__) объекта *o*. При вызове передайте `NULL` для *context*. Поскольку эта функция может выделять память для словаря, при обращении к атрибуту объекта эффективнее вызывать [`PyObject_GetAttr()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_GetAttr).112113В случае ошибки возвращает `NULL` с установленным исключением.114115Добавлено в версии 3.3.116117#### `int PyObject_GenericSetDict(PyObject *o, PyObject *value, void *context)`118119*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable) начиная с версии 3.7.*120121Универсальная реализация сеттера дескриптора `__dict__`. Эта реализация не позволяет удалять словарь.122123Добавлено в версии 3.3.124125#### `PyObject **_PyObject_GetDictPtr(PyObject *obj)`126127Возвращает указатель на [`__dict__`](https://python-all.ru/3.12/reference/datamodel.html#object.__dict__) объекта *obj*. Если `__dict__` отсутствует, возвращает `NULL` без установки исключения.128129Эта функция может выделять память для словаря, поэтому при обращении к атрибуту объекта эффективнее вызывать [`PyObject_GetAttr()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_GetAttr).130131#### `PyObject *PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)`132133*Возвращаемое значение: новая ссылка.*134135*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*136137Сравнивает значения *o1* и *o2* с помощью операции, заданной *opid*, которая должна быть одной из [`Py_LT`](https://python-all.ru/3.12/c-api/typeobj.html#c.Py_LT), [`Py_LE`](https://python-all.ru/3.12/c-api/typeobj.html#c.Py_LE), [`Py_EQ`](https://python-all.ru/3.12/c-api/typeobj.html#c.Py_EQ), [`Py_NE`](https://python-all.ru/3.12/c-api/typeobj.html#c.Py_NE), [`Py_GT`](https://python-all.ru/3.12/c-api/typeobj.html#c.Py_GT) или [`Py_GE`](https://python-all.ru/3.12/c-api/typeobj.html#c.Py_GE), соответствующих `<`, `<=`, `==`, `!=`, `>` или `>=` соответственно. Это эквивалент выражения Python `o1 op o2`, где `op` – оператор, соответствующий *opid*. При успехе возвращает результат сравнения, при ошибке – `NULL`.138139#### `int PyObject_RichCompareBool(PyObject *o1, PyObject *o2, int opid)`140141*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*142143Сравнивает значения *o1* и *o2* с помощью операции, заданной *opid*, как [`PyObject_RichCompare()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_RichCompare), но возвращает `-1` при ошибке, `0` если результат ложный, и `1` в противном случае.144145> **Примечание**146>147> Если *o1* и *o2* – один и тот же объект, [`PyObject_RichCompareBool()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_RichCompareBool) всегда будет возвращать `1` для [`Py_EQ`](https://python-all.ru/3.12/c-api/typeobj.html#c.Py_EQ) и `0` для [`Py_NE`](https://python-all.ru/3.12/c-api/typeobj.html#c.Py_NE).148149#### `PyObject *PyObject_Format(PyObject *obj, PyObject *format_spec)`150151*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*152153Форматирует *obj* с помощью *format\_spec*. Эквивалентно выражению Python `format(obj, format_spec)`.154155*format\_spec* может быть `NULL`. В этом случае вызов эквивалентен `format(obj)`. Возвращает форматированную строку в случае успеха и `NULL` при неудаче.156157#### `PyObject *PyObject_Repr(PyObject *o)`158159*Возвращаемое значение: новая ссылка.*160161*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*162163Вычисляет строковое представление объекта *o*. Возвращает строковое представление в случае успеха и `NULL` при неудаче. Это эквивалент выражения Python `repr(o)`. Вызывается встроенной функцией [`repr()`](https://python-all.ru/3.12/library/functions.html#repr).164165Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, помогающее гарантировать, что она не игнорирует активное исключение без уведомления.166167#### `PyObject *PyObject_ASCII(PyObject *o)`168169*Возвращаемое значение: новая ссылка.*170171*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*172173Как и [`PyObject_Repr()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_Repr), вычисляет строковое представление объекта *o*, но экранирует не-ASCII символы в строке, возвращаемой [`PyObject_Repr()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_Repr), с помощью управляющих последовательностей `\x`, `\u` или `\U`. Это создаёт строку, похожую на ту, что возвращается [`PyObject_Repr()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_Repr) в Python 2. Вызывается встроенной функцией [`ascii()`](https://python-all.ru/3.12/library/functions.html#ascii).174175#### `PyObject *PyObject_Str(PyObject *o)`176177*Возвращаемое значение: новая ссылка.*178179*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*180181Вычисляет строковое представление объекта *o*. Возвращает строковое представление в случае успеха и `NULL` при неудаче. Это эквивалент выражения Python `str(o)`. Вызывается встроенной функцией [`str()`](https://python-all.ru/3.12/library/stdtypes.html#str) и, следовательно, функцией [`print()`](https://python-all.ru/3.12/library/functions.html#print).182183Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, помогающее гарантировать, что она не игнорирует активное исключение без уведомления.184185#### `PyObject *PyObject_Bytes(PyObject *o)`186187*Возвращаемое значение: новая ссылка.*188189*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*190191Вычисляет байтовое представление объекта *o*. При неудаче возвращается `NULL`, а при успехе – объект bytes. Это эквивалентно выражению Python `bytes(o)`, когда *o* не является целым числом. В отличие от `bytes(o)`, возникает TypeError, когда *o* является целым числом вместо объекта bytes, инициализированного нулями.192193#### `int PyObject_IsSubclass(PyObject *derived, PyObject *cls)`194195*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*196197Возвращает `1`, если класс *derived* идентичен классу *cls* или является его подклассом, иначе возвращает `0`. В случае ошибки возвращает `-1`.198199Если *cls* является кортежем, проверка будет выполняться для каждого элемента в *cls*. Результатом будет `1`, если хотя бы одна из проверок вернёт `1`, иначе `0`.200201Если у *cls* есть метод [`__subclasscheck__()`](https://python-all.ru/3.12/reference/datamodel.html#type.__subclasscheck__), он будет вызван для определения статуса подкласса, как описано в [**PEP 3119**](https://python-all.ru/3.12/c-api/object.html). В противном случае *derived* является подклассом *cls*, если он является прямым или косвенным подклассом, т.е. содержится в [`cls.__mro__`](https://python-all.ru/3.12/reference/datamodel.html#type.__mro__).202203Обычно в качестве классов рассматриваются только объекты классов, т.е. экземпляры [`type`](https://python-all.ru/3.12/library/functions.html#type) или производного класса. Однако объекты могут переопределить это, имея атрибут [`__bases__`](https://python-all.ru/3.12/reference/datamodel.html#type.__bases__) (который должен быть кортежем базовых классов).204205#### `int PyObject_IsInstance(PyObject *inst, PyObject *cls)`206207*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*208209Возвращает `1`, если *inst* является экземпляром класса *cls* или подкласса *cls*, или `0`, если нет. При ошибке возвращает `-1` и устанавливает исключение.210211Если *cls* является кортежем, проверка будет выполняться для каждого элемента в *cls*. Результатом будет `1`, если хотя бы одна из проверок вернёт `1`, иначе `0`.212213Если у *cls* есть метод [`__instancecheck__()`](https://python-all.ru/3.12/reference/datamodel.html#type.__instancecheck__), он будет вызван для определения статуса подкласса, как описано в [**PEP 3119**](https://python-all.ru/3.12/c-api/object.html). В противном случае *inst* является экземпляром *cls*, если его класс является подклассом *cls*.214215Экземпляр *inst* может переопределить то, что считается его классом, с помощью атрибута [`__class__`](https://python-all.ru/3.12/reference/datamodel.html#object.__class__).216217Объект *cls* может переопределить, считается ли он классом и каковы его базовые классы, с помощью атрибута [`__bases__`](https://python-all.ru/3.12/reference/datamodel.html#type.__bases__) (который должен быть кортежем базовых классов).218219#### `Py_hash_t PyObject_Hash(PyObject *o)`220221*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*222223Вычисляет и возвращает хеш-значение объекта *o*. При неудаче возвращает `-1`. Это эквивалент выражения Python `hash(o)`.224225Изменено в версии 3.2: Тип возвращаемого значения теперь Py\_hash\_t. Это знаковое целое число того же размера, что и [`Py_ssize_t`](https://python-all.ru/3.12/c-api/intro.html#c.Py_ssize_t).226227#### `Py_hash_t PyObject_HashNotImplemented(PyObject *o)`228229*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*230231Set a [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError) indicating that `type(o)` is not [hashable](https://python-all.ru/3.12/glossary.html#term-hashable) and return `-1`. This function receives special treatment when stored in a `tp_hash` slot, allowing a type to explicitly indicate to the interpreter that it is not hashable.232233#### `int PyObject_IsTrue(PyObject *o)`234235*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*236237Возвращает `1`, если объект *o* считается истинным, и `0` в противном случае. Эквивалентно выражению Python `not not o`. При неудаче возвращает `-1`.238239#### `int PyObject_Not(PyObject *o)`240241*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*242243Возвращает `0`, если объект *o* считается истинным, и `1` в противном случае. Эквивалентно выражению Python `not o`. При неудаче возвращает `-1`.244245#### `PyObject *PyObject_Type(PyObject *o)`246247*Возвращаемое значение: новая ссылка.*248249*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*250251Если *o* не равно `NULL`, возвращает объект типа, соответствующего типу объекта *o*. В случае неудачи вызывает [`SystemError`](https://python-all.ru/3.12/library/exceptions.html#SystemError) и возвращает `NULL`. Это эквивалентно выражению Python `type(o)`. Эта функция создаёт новую [сильную ссылку](https://python-all.ru/3.12/glossary.html#term-strong-reference) на возвращаемое значение. Нет особой причины использовать эту функцию вместо [`Py_TYPE()`](https://python-all.ru/3.12/c-api/structures.html#c.Py_TYPE), которая возвращает указатель типа [PyTypeObject](https://python-all.ru/3.12/c-api/type.html#c.PyTypeObject)\*, за исключением случаев, когда требуется новая [сильная ссылка](https://python-all.ru/3.12/glossary.html#term-strong-reference).252253#### `int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)`254255Возвращает ненулевое значение, если объект *o* имеет тип *type* или является подтипом *type*, и `0` в противном случае. Оба параметра должны быть не равны `NULL`.256257#### `Py_ssize_t PyObject_Size(PyObject *o)`258259#### `Py_ssize_t PyObject_Length(PyObject *o)`260261*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*262263Возвращает длину объекта *o*. Если объект *o* предоставляет протоколы последовательности и отображения, возвращается длина последовательности. При ошибке возвращается `-1`. Эквивалентно выражению Python `len(o)`.264265#### `Py_ssize_t PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue)`266267Возвращает оценочную длину объекта *o*. Сначала пытается вернуть его фактическую длину, затем оценку с помощью [`__length_hint__()`](https://python-all.ru/3.12/reference/datamodel.html#object.__length_hint__), и в итоге возвращает значение по умолчанию. При ошибке возвращает `-1`. Эквивалентно выражению Python `operator.length_hint(o, defaultvalue)`.268269Добавлено в версии 3.4.270271#### `PyObject *PyObject_GetItem(PyObject *o, PyObject *key)`272273*Возвращаемое значение: новая ссылка.*274275*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*276277Возвращает элемент *o*, соответствующий объекту *key*, или `NULL` при неудаче. Эквивалентно выражению Python `o[key]`.278279#### `int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)`280281*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*282283Сопоставляет объекту *key* значение *v*. Возбуждает исключение и возвращает `-1` при неудаче; возвращает `0` в случае успеха. Эквивалентно инструкции Python `o[key] = v`. Эта функция *не* крадёт ссылку на *v*.284285#### `int PyObject_DelItem(PyObject *o, PyObject *key)`286287*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*288289Удаляет сопоставление для объекта *key* из объекта *o*. Возвращает `-1` при неудаче. Эквивалентно инструкции Python `del o[key]`.290291#### `int PyObject_DelItemString(PyObject *o, const char *key)`292293*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*294295То же, что и [`PyObject_DelItem()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_DelItem), но *key* задаётся как const char\* строка байтов в кодировке UTF-8, а не как [PyObject](https://python-all.ru/3.12/c-api/structures.html#c.PyObject)\*.296297#### `PyObject *PyObject_Dir(PyObject *o)`298299*Возвращаемое значение: новая ссылка.*300301*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*302303Эквивалентно выражению Python `dir(o)`, возвращает (возможно пустой) список строк, подходящих для аргумента-объекта, или `NULL`, если произошла ошибка. Если аргумент равен `NULL`, это похоже на `dir()` в Python, возвращает имена текущих локальных переменных; в этом случае, если нет активного фрейма выполнения, возвращается `NULL`, но [`PyErr_Occurred()`](https://python-all.ru/3.12/c-api/exceptions.html#c.PyErr_Occurred) вернёт false.304305#### `PyObject *PyObject_GetIter(PyObject *o)`306307*Возвращаемое значение: новая ссылка.*308309*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*310311Эквивалентно выражению Python `iter(o)`. Возвращает новый итератор для аргумента-объекта, или сам объект, если объект уже является итератором. Возбуждает [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError) и возвращает `NULL`, если объект не может быть итерирован.312313#### `PyObject *PyObject_SelfIter(PyObject *obj)`314315*Возвращаемое значение: новая ссылка.*316317*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*318319This is equivalent to the Python `__iter__(self): return self` method. It is intended for [iterator](https://python-all.ru/3.12/glossary.html#term-iterator) types, to be used in the [`PyTypeObject.tp_iter`](https://python-all.ru/3.12/c-api/typeobj.html#c.PyTypeObject.tp_iter) slot.320321#### `PyObject *PyObject_GetAIter(PyObject *o)`322323*Возвращаемое значение: новая ссылка.*324325*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable) начиная с версии 3.10.*326327Эквивалентно выражению Python `aiter(o)`. Принимает объект `AsyncIterable` и возвращает для него `AsyncIterator`. Обычно это новый итератор, но если аргумент является `AsyncIterator`, возвращает самого себя. Возбуждает [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError) и возвращает `NULL`, если объект не может быть итерирован.328329Добавлено в версии 3.10.330331#### `void *PyObject_GetTypeData(PyObject *o, PyTypeObject *cls)`332333*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable) начиная с версии 3.12.*334335Получить указатель на данные, специфичные для подкласса, зарезервированные для *cls*.336337Объект *o* должен быть экземпляром *cls*, а *cls* должен быть создан с использованием отрицательного [`PyType_Spec.basicsize`](https://python-all.ru/3.12/c-api/type.html#c.PyType_Spec.basicsize). Python не проверяет это.338339При ошибке устанавливает исключение и возвращает `NULL`.340341Добавлено в версии 3.12.342343#### `Py_ssize_t PyType_GetTypeDataSize(PyTypeObject *cls)`344345*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable) начиная с версии 3.12.*346347Возвращает размер памяти экземпляра, зарезервированной для *cls*, то есть размер памяти, возвращаемой [`PyObject_GetTypeData()`](https://python-all.ru/3.12/c-api/object.html#c.PyObject_GetTypeData).348349Это значение может быть больше запрошенного с помощью [`-PyType_Spec.basicsize`](https://python-all.ru/3.12/c-api/type.html#c.PyType_Spec.basicsize); допускается использовать этот больший размер (например, с `memset()`).350351Тип *cls* **должен** быть создан с использованием отрицательного [`PyType_Spec.basicsize`](https://python-all.ru/3.12/c-api/type.html#c.PyType_Spec.basicsize). Python не проверяет этого.352353В случае ошибки устанавливает исключение и возвращает отрицательное значение.354355Добавлено в версии 3.12.356357#### `void *PyObject_GetItemData(PyObject *o)`358359Возвращает указатель на данные для каждого элемента класса с [`Py_TPFLAGS_ITEMS_AT_END`](https://python-all.ru/3.12/c-api/typeobj.html#c.Py_TPFLAGS_ITEMS_AT_END).360361В случае ошибки устанавливает исключение и возвращает `NULL`. [`TypeError`](https://python-all.ru/3.12/library/exceptions.html#TypeError) возбуждается, если у *o* не установлен [`Py_TPFLAGS_ITEMS_AT_END`](https://python-all.ru/3.12/c-api/typeobj.html#c.Py_TPFLAGS_ITEMS_AT_END).362363Добавлено в версии 3.12.364