Протокол объекта

PyObject *Py_NotImplemented

Синглтон NotImplemented, используемый для сигнализации о том, что операция не реализована для данной комбинации типов.

Py_RETURN_NOTIMPLEMENTED

Правильно обрабатывать возврат Py_NotImplemented из функции языка Си (то есть увеличивать счетчик ссылок NotImplemented и возвращать его).

int PyObject_Print(PyObject *o, FILE *fp, int flags)

Печать объекта o в файл fp. При ошибке возвращает -1. Аргумент flags используется для включения определенных опций печати. Единственная поддерживаемая в настоящее время опция - Py_PRINT_RAW; если она задана, то вместо str() записывается repr() объекта.

int PyObject_HasAttr(PyObject *o, PyObject *attr_name)
Part of the Stable ABI.

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

Обратите внимание, что исключения, возникающие при вызове методов __getattr__() и __getattribute__(), будут подавлены. Для получения сообщений об ошибках используйте PyObject_GetAttr() вместо этого.

int PyObject_HasAttrString(PyObject *o, const char *attr_name)
Part of the Stable ABI.

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

Обратите внимание, что исключения, возникающие при вызове методов __getattr__() и __getattribute__() и создании временного строкового объекта, будут подавлены. Для получения сообщений об ошибках используйте PyObject_GetAttrString() вместо этого.

PyObject *PyObject_GetAttr(PyObject *o, PyObject *attr_name)
Return value: New reference. Part of the Stable ABI.

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

PyObject *PyObject_GetAttrString(PyObject *o, const char *attr_name)
Return value: New reference. Part of the Stable ABI.

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

PyObject *PyObject_GenericGetAttr(PyObject *o, PyObject *name)
Return value: New reference. Part of the Stable ABI.

Общая функция получения атрибутов, предназначенная для размещения в слоте tp_getattro объекта типа. Она ищет дескриптор в словаре классов в MRO объекта, а также атрибут в __dict__ объекта (если он есть). Как указано в Реализация дескрипторов, дескрипторы данных имеют преимущество перед атрибутами экземпляра, а дескрипторы не данных - нет. В противном случае возникает ошибка AttributeError.

int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)
Part of the Stable ABI.

Установить значение атрибута с именем attr_name для объекта o в значение v. Вызвать исключение и вернуть -1 при неудаче; вернуть 0 при успехе. Это эквивалент оператора Python o.attr_name = v.

Если v равно NULL, атрибут удаляется. Это поведение устарело в пользу использования PyObject_DelAttr(), но в настоящее время нет планов по его удалению.

int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)
Part of the Stable ABI.

Установить значение атрибута с именем attr_name для объекта o в значение v. Вызвать исключение и вернуть -1 при неудаче; вернуть 0 при успехе. Это эквивалент оператора Python o.attr_name = v.

Если v равно NULL, атрибут удаляется, но эта функция устарела в пользу использования PyObject_DelAttrString().

int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)
Part of the Stable ABI.

Общая функция установки и удаления атрибутов, предназначенная для размещения в слоте tp_setattro объекта типа. Она ищет дескриптор данных в словаре классов в MRO объекта, и если он найден, то имеет предпочтение перед установкой или удалением атрибута в словаре экземпляра. В противном случае атрибут устанавливается или удаляется в __dict__ объекта (если он есть). В случае успеха возвращается 0, в противном случае возникает ошибка AttributeError и возвращается -1.

int PyObject_DelAttr(PyObject *o, PyObject *attr_name)

Удалить атрибут с именем attr_name, для объекта o. При неудаче возвращается -1. Это эквивалент оператора Python del o.attr_name.

int PyObject_DelAttrString(PyObject *o, const char *attr_name)

Удалить атрибут с именем attr_name, для объекта o. При неудаче возвращается -1. Это эквивалент оператора Python del o.attr_name.

PyObject *PyObject_GenericGetDict(PyObject *o, void *context)
Return value: New reference. Part of the Stable ABI since version 3.10.

Общая реализация для геттера дескриптора __dict__. При необходимости создает словарь.

Добавлено в версии 3.3.

int PyObject_GenericSetDict(PyObject *o, PyObject *value, void *context)
Part of the Stable ABI since version 3.7.

Общая реализация для сеттера дескриптора __dict__. Эта реализация не позволяет удалять словарь.

Добавлено в версии 3.3.

PyObject *PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)
Return value: New reference. Part of the Stable ABI.

Сравните значения 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 *o1, PyObject *o2, int opid)
Part of the Stable ABI.

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

Примечание

Если o1 и o2 являются одним и тем же объектом, PyObject_RichCompareBool() всегда будет возвращать 1 для Py_EQ и 0 для Py_NE.

PyObject *PyObject_Repr(PyObject *o)
Return value: New reference. Part of the Stable ABI.

Вычислить строковое представление объекта o. При успехе возвращает строковое представление, при неудаче - NULL. Это эквивалент выражения Python repr(o). Вызывается встроенной функцией repr().

Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, чтобы гарантировать, что она не отбрасывает активное исключение.

PyObject *PyObject_ASCII(PyObject *o)
Return value: New reference. Part of the Stable ABI.

Как и PyObject_Repr(), вычислите строковое представление объекта o, но экранируйте символы, не относящиеся к ASCII, в строке, возвращаемой PyObject_Repr() с помощью \x, \u или \U. Это генерирует строку, подобную той, которую возвращает PyObject_Repr() в Python 2. Вызывается встроенной функцией ascii().

PyObject *PyObject_Str(PyObject *o)
Return value: New reference. Part of the Stable ABI.

Вычислить строковое представление объекта o. При успехе возвращает строковое представление, при неудаче - NULL. Это эквивалент выражения Python str(o). Вызывается встроенной функцией str() и, следовательно, функцией print().

Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, чтобы гарантировать, что она не отбрасывает активное исключение.

PyObject *PyObject_Bytes(PyObject *o)
Return value: New reference. Part of the Stable ABI.

Вычислить байтовое представление объекта o. В случае неудачи возвращается NULL, а в случае успеха - байтовый объект. Это эквивалентно выражению Python bytes(o), когда o не является целым числом. В отличие от bytes(o), когда o является целым числом, а не нуль-инициализированным объектом bytes, выдается ошибка типа TypeError.

int PyObject_IsSubclass(PyObject *derived, PyObject *cls)
Part of the Stable ABI.

Возвращает 1, если класс derived идентичен или производен от класса cls, иначе возвращает 0. В случае ошибки возвращается -1.

Если cls - кортеж, то проверка будет выполнена для каждой записи в cls. Результатом будет 1, если хотя бы одна из проверок вернет 1, в противном случае будет 0.

Если у cls есть метод __subclasscheck__(), он будет вызван для определения статуса подкласса, как описано в PEP 3119. В противном случае, derived является подклассом cls, если он является прямым или косвенным подклассом, т.е. содержится в cls.__mro__.

Обычно классами считаются только объекты классов, т.е. экземпляры type или производного класса. Однако объекты могут отменить это, имея атрибут __bases__ (который должен быть кортежем базовых классов).

int PyObject_IsInstance(PyObject *inst, PyObject *cls)
Part of the Stable ABI.

Возвращает 1, если inst является экземпляром класса cls или подклассом cls, или 0, если нет. При ошибке возвращается -1 и устанавливается исключение.

Если cls - кортеж, то проверка будет выполнена для каждой записи в cls. Результатом будет 1, если хотя бы одна из проверок вернет 1, в противном случае будет 0.

Если у cls есть метод __instancecheck__(), он будет вызван для определения статуса подкласса, как описано в PEP 3119. В противном случае inst является экземпляром cls, если его класс является подклассом cls.

Экземпляр inst может переопределить то, что считается его классом, имея атрибут __class__.

Объект cls может переопределить, считается ли он классом, и каковы его базовые классы, имея атрибут __bases__ (который должен быть кортежем базовых классов).

Py_hash_t PyObject_Hash(PyObject *o)
Part of the Stable ABI.

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

Изменено в версии 3.2: Типом возврата теперь является Py_hash_t. Это знаковое целое число того же размера, что и Py_ssize_t.

Py_hash_t PyObject_HashNotImplemented(PyObject *o)
Part of the Stable ABI.

Установите TypeError, указывающий на то, что type(o) не является хэшируемым, и верните -1. Эта функция получает особое обращение, когда хранится в слоте tp_hash, что позволяет типу явно указать интерпретатору, что он не является хэшируемым.

int PyObject_IsTrue(PyObject *o)
Part of the Stable ABI.

Возвращает 1, если объект o считается истинным, и 0 в противном случае. Это эквивалентно выражению Python not not o. В случае неудачи возвращается -1.

int PyObject_Not(PyObject *o)
Part of the Stable ABI.

Возвращает 0, если объект o считается истинным, и 1 в противном случае. Это эквивалентно выражению Python not o. В случае неудачи возвращается -1.

PyObject *PyObject_Type(PyObject *o)
Return value: New reference. Part of the Stable ABI.

Если o не``NULL``, возвращает объект типа, соответствующего типу объекта o. В случае неудачи выдает SystemError и возвращает NULL. Это эквивалентно выражению Python type(o). Эта функция увеличивает счетчик ссылок возвращаемого значения. На самом деле нет причин использовать эту функцию вместо функции Py_TYPE(), которая возвращает указатель типа PyTypeObject*, за исключением случаев, когда необходимо увеличить счетчик ссылок.

int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)

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

Py_ssize_t PyObject_Size(PyObject *o)
Py_ssize_t PyObject_Length(PyObject *o)
Part of the Stable ABI.

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

Py_ssize_t PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue)

Возвращает оценочную длину для объекта o. Сначала попытайтесь вернуть его фактическую длину, затем оценочную, используя __length_hint__(), и, наконец, верните значение по умолчанию. При ошибке возвращается -1. Это эквивалентно выражению Python operator.length_hint(o, defaultvalue).

Добавлено в версии 3.4.

PyObject *PyObject_GetItem(PyObject *o, PyObject *key)
Return value: New reference. Part of the Stable ABI.

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

int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)
Part of the Stable ABI.

Сопоставить объект key со значением v. При неудаче вызывает исключение и возвращает -1; при успехе возвращает 0. Это эквивалент оператора Python o[key] = v. Эта функция не крадет ссылку на v.

int PyObject_DelItem(PyObject *o, PyObject *key)
Part of the Stable ABI.

Удалить отображение для объекта key из объекта o. При неудаче возвращается -1. Это эквивалентно оператору Python del o[key].

PyObject *PyObject_Dir(PyObject *o)
Return value: New reference. Part of the Stable ABI.

Это эквивалентно выражению Python dir(o), возвращающему (возможно, пустой) список строк, соответствующих аргументу объекта, или NULL, если произошла ошибка. Если аргументом является NULL, это эквивалентно выражению Python dir(), возвращающему имена текущих локалей; в этом случае, если ни один кадр выполнения не активен, возвращается NULL, но PyErr_Occurred() возвращает false.

PyObject *PyObject_GetIter(PyObject *o)
Return value: New reference. Part of the Stable ABI.

Это эквивалентно выражению Python iter(o). Оно возвращает новый итератор для аргумента объекта или сам объект, если объект уже является итератором. Вызывает TypeError и возвращает NULL, если объект не может быть итератором.

PyObject *PyObject_GetAIter(PyObject *o)
Return value: New reference. Part of the Stable ABI since version 3.10.

Это эквивалент выражения aiter(o) в Python. Принимает объект AsyncIterable и возвращает для него AsyncIterator. Обычно это новый итератор, но если аргументом является AsyncIterator, то возвращается он сам. Вызывает TypeError и возвращает NULL, если объект не может быть итерирован.

Добавлено в версии 3.10.

Вернуться на верх