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

---

# Протокол объектов

**int `PyObject_Print`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, FILE *\*fp*, int *flags*)**

Выводит объект

*o*

в файл

*fp*

. Возвращает

`-1`

в случае ошибки. Аргумент flags используется для включения определённых опций вывода. Единственная поддерживаемая в настоящее время опция –

`Py_PRINT_RAW`

; если она указана, выводится

[`str()`](https://python-all.ru/2.6/library/functions.html#str)

объекта вместо

[`repr()`](https://python-all.ru/2.6/library/functions.html#repr)

.

**int `PyObject_HasAttr`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*attr\_name*)**

Возвращает

`1`

, если

*o*

имеет атрибут

*attr\_name*

, и

`0`

в противном случае. Это эквивалентно выражению Python

`hasattr(o, attr_name)`

. Эта функция всегда завершается успешно.

**int `PyObject_HasAttrString`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, const char *\*attr\_name*)**

Возвращает

`1`

, если

*o*

имеет атрибут

*attr\_name*

, и

`0`

в противном случае. Это эквивалентно выражению Python

`hasattr(o, attr_name)`

. Эта функция всегда завершается успешно.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_GetAttr`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*attr\_name*)**

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

Извлекает атрибут с именем *attr\_name* из объекта *o*. Возвращает значение атрибута при успехе или *NULL* при неудаче. Это эквивалент выражения Python `o.attr_name`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_GetAttrString`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, const char *\*attr\_name*)**

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

Извлекает атрибут с именем *attr\_name* из объекта *o*. Возвращает значение атрибута при успехе или *NULL* при неудаче. Это эквивалент выражения Python `o.attr_name`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_GenericGetAttr`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*name*)**

Обобщённая функция получения атрибута, предназначенная для размещения в слот

`tp_getattro`

объекта типа. Она ищет дескриптор в словаре классов в MRO объекта, а также атрибут в

`__dict__`

объекта (если он присутствует). Как описано в

[*Implementing Descriptors*](https://python-all.ru/2.6/reference/datamodel.html#descriptors)

, дескрипторы данных имеют приоритет над атрибутами экземпляра, а дескрипторы без данных – нет. В противном случае возбуждается

[`AttributeError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.AttributeError)

.

**int `PyObject_SetAttr`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*attr\_name*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*v*)**

Устанавливает значение атрибута с именем

*attr\_name*

для объекта

*o*

равным

*v*

. Возвращает

`-1`

при неудаче. Это эквивалент оператора Python

`o.attr_name = v`

.

**int `PyObject_SetAttrString`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, const char *\*attr\_name*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*v*)**

Устанавливает значение атрибута с именем

*attr\_name*

для объекта

*o*

равным

*v*

. Возвращает

`-1`

при неудаче. Это эквивалент оператора Python

`o.attr_name = v`

.

**int `PyObject_GenericSetAttr`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*name*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*value*)**

Обобщённая функция установки атрибута, предназначенная для размещения в слот

`tp_setattro`

объекта типа. Она ищет дескриптор данных в словаре классов в MRO объекта, и если найден, то имеет приоритет над установкой атрибута в словаре экземпляра. В противном случае, атрибут устанавливается в

`__dict__`

объекта (если он присутствует). Иначе возбуждается

[`AttributeError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.AttributeError)

и возвращается

`-1`

.

**int `PyObject_DelAttr`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*attr\_name*)**

Удаляет атрибут с именем

*attr\_name*

для объекта

*o*

. Возвращает

`-1`

при неудаче. Это эквивалент оператора Python

`del o.attr_name`

.

**int `PyObject_DelAttrString`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, const char *\*attr\_name*)**

Удаляет атрибут с именем

*attr\_name*

для объекта

*o*

. Возвращает

`-1`

при неудаче. Это эквивалент оператора Python

`del o.attr_name`

.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_RichCompare`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*, int *opid*)**

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

Сравнивает значения *o1* и *o2* с помощью операции, заданной *opid*, которая должна быть одной из `Py_LT`, `Py_LE`, `Py_EQ`, `Py_NE`, `Py_GT` или `Py_GE`, что соответствует `<`, `<=`, `==`, `!=`, `>` или `>=` соответственно. Это эквивалент выражения Python `o1 op o2`, где `op` – оператор, соответствующий *opid*. Возвращает результат сравнения в случае успеха или *NULL* при ошибке.

**int `PyObject_RichCompareBool`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*, int *opid*)**

Сравнивает значения

*o1*

и

*o2*

с помощью операции, заданной

*opid*

, которая должна быть одной из

`Py_LT`

,

`Py_LE`

,

`Py_EQ`

,

`Py_NE`

,

`Py_GT`

или

`Py_GE`

, что соответствует

`<`

,

`<=`

,

`==`

,

`!=`

,

`>`

или

`>=`

соответственно. Возвращает

`-1`

при ошибке,

`0`

если результат ложный,

`1`

в противном случае. Это эквивалент выражения Python

`o1 op o2`

, где

`op`

– оператор, соответствующий

*opid*

.

**int `PyObject_Cmp`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*, int *\*result*)**

Сравнивает значения *o1* и *o2* с помощью процедуры, предоставленной *o1*, если таковая существует, иначе – процедурой от *o2*. Результат сравнения сохраняется в *result*. Возвращает `-1` в случае ошибки. Это эквивалент оператора Python `result = cmp(o1, o2)`.

**int `PyObject_Compare`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o2*)**

Сравнивает значения *o1* и *o2* с помощью процедуры, предоставленной *o1*, если таковая существует, иначе – процедурой от *o2*. В случае успеха возвращает результат сравнения. При ошибке возвращаемое значение не определено; для обнаружения ошибки используйте [`PyErr_Occurred()`](https://python-all.ru/2.6/c-api/exceptions.html#PyErr_Occurred). Это эквивалент выражения Python `cmp(o1, o2)`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_Repr`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

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

Вычисляет строковое представление объекта *o*. Возвращает строковое представление в случае успеха, *NULL* при ошибке. Это эквивалент выражения Python `repr(o)`. Вызывается встроенной функцией [`repr()`](https://python-all.ru/2.6/library/functions.html#repr) и обратными кавычками.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_Str`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

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

Вычисляет строковое представление объекта *o*. Возвращает строковое представление в случае успеха, *NULL* при ошибке. Это эквивалент выражения Python `str(o)`. Вызывается встроенной функцией [`str()`](https://python-all.ru/2.6/library/functions.html#str) и оператором [`print`](https://python-all.ru/2.6/reference/simple_stmts.html#print).

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_Bytes`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

Вычисляет байтовое представление объекта *o*. В версии 2.x это просто псевдоним для [`PyObject_Str()`](https://python-all.ru/2.6/c-api/object.html#PyObject_Str).

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_Unicode`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

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

Вычисляет строковое представление в Unicode объекта *o*. Возвращает строковое представление Unicode в случае успеха, *NULL* при ошибке. Это эквивалент выражения Python `unicode(o)`. Вызывается встроенной функцией [`unicode()`](https://python-all.ru/2.6/library/functions.html#unicode).

**int `PyObject_IsInstance`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*inst*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*cls*)**

Возвращает `1`, если *inst* является экземпляром класса *cls* или подкласса *cls*, и `0` в противном случае. В случае ошибки возвращает `-1` и устанавливает исключение. Если *cls* является объектом типа, а не объектом класса, [`PyObject_IsInstance()`](https://python-all.ru/2.6/c-api/object.html#PyObject_IsInstance) возвращает `1`, если *inst* имеет тип *cls*. Если *cls* – кортеж, проверка будет выполнена по каждому элементу в *cls*. Результат будет `1`, когда хотя бы одна из проверок вернёт `1`, иначе будет `0`. Если *inst* не является экземпляром класса, а *cls* – ни объектом типа, ни объектом класса, ни кортежем, *inst* должен иметь атрибут `__class__` – отношение класса значения этого атрибута к *cls* будет использовано для определения результата этой функции.

Новое в версии 2.1.

Изменено в версии 2.2: Добавлена поддержка кортежа в качестве второго аргумента.

Определение подкласса выполняется достаточно прямолинейно, но содержит тонкость, о которой разработчикам расширений системы классов стоит знать . Если `A` и `B` являются объектами классов, `B` является подклассом `A`, если он наследует от `A` прямо или косвенно. Если хотя бы один из них не является объектом класса, используется более общий механизм для определения отношения классов между двумя объектами. При проверке, является ли *B* подклассом *A*, если *A* равен *B*, [`PyObject_IsSubclass()`](https://python-all.ru/2.6/c-api/object.html#PyObject_IsSubclass) возвращает true. Если *A* и *B* – разные объекты, атрибут *B* `__bases__` ищется в глубину на наличие *A* – наличие атрибута `__bases__` считается достаточным для такого определения.

**int `PyObject_IsSubclass`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*derived*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*cls*)**

Возвращает `1`, если класс *derived* идентичен классу *cls* или наследуется от него, иначе возвращает `0`. В случае ошибки возвращает `-1`. Если *cls* является кортежем, проверка будет выполнена для каждого элемента *cls*. Результат будет `1`, когда хотя бы одна из проверок возвращает `1`, иначе `0`. Если *derived* или *cls* не являются реальными объектами классов (или кортежем), эта функция использует описанный выше общий алгоритм.

Новое в версии 2.1.

Изменено в версии 2.3: Более старые версии Python не поддерживали кортеж в качестве второго аргумента.

**int `PyCallable_Check`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

Определяет, является ли объект

*o*

вызываемым. Возвращает

`1`

, если объект вызываем, и

`0`

в противном случае. Эта функция всегда завершается успешно.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_Call`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*callable\_object*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*args*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*kw*)**

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

Вызывает вызываемый объект Python *callable\_object* с аргументами, заданными кортежем *args*, и именованными аргументами, заданными словарём *kw*. Если именованные аргументы не нужны, *kw* может быть *NULL*. *args* не должен быть *NULL*; используйте пустой кортеж, если аргументы не нужны. Возвращает результат вызова в случае успеха или *NULL* при ошибке. Это эквивалент выражения Python `apply(callable_object, args, kw)` или `callable_object(*args, **kw)`.

Новое в версии 2.2.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_CallObject`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*callable\_object*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*args*)**

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

Вызывает вызываемый объект Python *callable\_object* с аргументами, заданными кортежем *args*. Если аргументы не нужны, *args* может быть *NULL*. Возвращает результат вызова в случае успеха или *NULL* при ошибке. Это эквивалент выражения Python `apply(callable_object, args)` или `callable_object(*args)`.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_CallFunction`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*callable*, char *\*format*, ...)**

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

Вызывает вызываемый объект Python *callable* с переменным числом аргументов C. Аргументы C описываются строкой формата в стиле [`Py_BuildValue()`](https://python-all.ru/2.6/c-api/arg.html#Py_BuildValue). Формат может быть *NULL*, что означает отсутствие аргументов. Возвращает результат вызова в случае успеха или *NULL* при ошибке. Это эквивалент выражения Python `apply(callable, args)` или `callable(*args)`. Обратите внимание, что если передаются только аргументы типа [`PyObject *`](https://python-all.ru/2.6/c-api/structures.html#PyObject), то быстрее будет использовать [`PyObject_CallFunctionObjArgs()`](https://python-all.ru/2.6/c-api/object.html#PyObject_CallFunctionObjArgs).

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_CallMethod`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, char *\*method*, char *\*format*, ...)**

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

Вызывает метод с именем *method* объекта *o* с переменным числом аргументов C. Аргументы C описываются строкой форматирования в стиле [`Py_BuildValue()`](https://python-all.ru/2.6/c-api/arg.html#Py_BuildValue), которая должна создавать кортеж. Формат может быть *NULL*, что означает отсутствие аргументов. Возвращает результат вызова в случае успеха или *NULL* при ошибке. Это эквивалент выражения Python `o.method(args)`. Обратите внимание: если передаются только аргументы типа [`PyObject *`](https://python-all.ru/2.6/c-api/structures.html#PyObject), то более быстрой альтернативой будет [`PyObject_CallMethodObjArgs()`](https://python-all.ru/2.6/c-api/object.html#PyObject_CallMethodObjArgs).

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_CallFunctionObjArgs`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*callable*, ..., NULL)**

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

Вызывает вызываемый объект Python *callable* с переменным числом аргументов типа [`PyObject*`](https://python-all.ru/2.6/c-api/structures.html#PyObject). Аргументы передаются как переменное число параметров, за которыми следует *NULL*. Возвращает результат вызова в случае успеха или *NULL* при ошибке.

Новое в версии 2.2.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_CallMethodObjArgs`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*name*, ..., NULL)**

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

Вызывает метод объекта *o*, где имя метода передаётся в виде строкового объекта Python в *name*. Вызывается с переменным числом аргументов [`PyObject*`](https://python-all.ru/2.6/c-api/structures.html#PyObject). Аргументы передаются как переменное число параметров, за которыми следует *NULL*. Возвращает результат вызова в случае успеха или *NULL* при ошибке.

Новое в версии 2.2.

**long `PyObject_Hash`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

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

**long `PyObject_HashNotImplemented`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

Устанавливает [`TypeError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.TypeError), сообщающий, что `type(o)` не хешируется, и возвращает `-1`. Эта функция получает особую обработку, если помещена в слот `tp_hash`, позволяя типу явно указать интерпретатору, что он не хешируется.

Новое в версии 2.6.

**int `PyObject_IsTrue`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

Возвращает

`1`

, если объект

*o*

считается истинным, и

`0`

в противном случае. Это эквивалент выражения Python

`not not o`

. В случае ошибки возвращает

`-1`

.

**int `PyObject_Not`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

Возвращает

`0`

, если объект

*o*

считается истинным, и

`1`

в противном случае. Это эквивалент выражения Python

`not o`

. В случае ошибки возвращает

`-1`

.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_Type`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

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

Если *o* не равно *NULL*, возвращает объект типа, соответствующий типу объекта *o*. В случае ошибки возбуждает [`SystemError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.SystemError) и возвращает *NULL*. Это эквивалент выражения Python `type(o)`. Эта функция увеличивает счётчик ссылок возвращаемого значения. Нет особой причины использовать эту функцию вместо обычного выражения `o->ob_type`, которое возвращает указатель типа [`PyTypeObject*`](https://python-all.ru/2.6/c-api/type.html#PyTypeObject), за исключением случаев, когда требуется увеличенный счётчик ссылок.

**int `PyObject_TypeCheck`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, [PyTypeObject](https://python-all.ru/2.6/c-api/type.html#PyTypeObject) *\*type*)**

Возвращает истину, если объект *o* имеет тип *type* или является подтипом *type*. Оба параметра не должны быть *NULL*.

Новое в версии 2.2.

**Py\_ssize\_t `PyObject_Length`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

**Py\_ssize\_t `PyObject_Size`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

Возвращает длину объекта *o*. Если объект *o* предоставляет протоколы последовательности и отображения, возвращается длина последовательности. При ошибке возвращается `-1`. Это эквивалент выражения Python `len(o)`.

Изменено в версии 2.5: Ранее эти функции возвращали значение типа `int`. Это может потребовать изменений в вашем коде для корректной поддержки 64-битных систем.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_GetItem`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*key*)**

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

Возвращает элемент *o*, соответствующий объекту *key*, или *NULL* при ошибке. Это эквивалентно выражению Python `o[key]`.

**int `PyObject_SetItem`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*key*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*v*)**

Сопоставляет объект

*key*

со значением

*v*

. При ошибке возвращает

`-1`

. Это эквивалент инструкции Python

`o[key] = v`

.

**int `PyObject_DelItem`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*key*)**

Удаляет отображение для

*key*

из

*o*

. При ошибке возвращает

`-1`

. Это эквивалент инструкции Python

`del o[key]`

.

**int `PyObject_AsFileDescriptor`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

Извлекает файловый дескриптор из объекта Python. Если объект является целым числом (int) или длинным целым (long), возвращается его значение. В противном случае вызывается метод объекта

`fileno()`

, если он существует; метод должен возвращать целое или длинное целое число, которое и будет значением файлового дескриптора. Возвращает

`-1`

при ошибке.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_Dir`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

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

Это эквивалент выражения Python `dir(o)`, возвращает (возможно, пустой) список строк, соответствующий аргументу-объекту, или *NULL* в случае ошибки. Если аргумент равен *NULL*, это аналогично Python `dir()`, возвращающему имена текущих локальных переменных; в этом случае, если активного кадра выполнения нет, возвращается *NULL*, но [`PyErr_Occurred()`](https://python-all.ru/2.6/c-api/exceptions.html#PyErr_Occurred) вернёт ложь.

**[PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject)\* `PyObject_GetIter`([PyObject](https://python-all.ru/2.6/c-api/structures.html#PyObject) *\*o*)**

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

Это эквивалент выражения Python `iter(o)`. Возвращает новый итератор для аргумента-объекта или сам объект, если он уже является итератором. Возбуждает [`TypeError`](https://python-all.ru/2.6/library/exceptions.html#exceptions.TypeError) и возвращает *NULL*, если объект не может быть итерирован.
