Объектный протокол

PyObject *Py_NotImplemented

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

Py_RETURN_NOTIMPLEMENTED

Правильно обработайте возврат Py_NotImplemented из функции C (то есть создайте новый strong reference, который не реализован, и верните его).

Py_PRINT_RAW

Флаг, который будет использоваться с несколькими функциями, выводящими объект на печать (например PyObject_Print() и PyFile_WriteObject()). Если бы эта функция была передана, она использовала бы str() объекта вместо repr().

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

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

int PyObject_HasAttr(PyObject *o, PyObject *attr_name)
Part of the Стабильный 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 Стабильный ABI.

Это то же самое, что и PyObject_HasAttr(), но attr_name указывается как строка const char* в кодировке UTF-8 байт, а не как PyObject*.

Примечание

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

PyObject *PyObject_GetAttr(PyObject *o, PyObject *attr_name)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

PyObject *PyObject_GetAttrString(PyObject *o, const char *attr_name)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

Это то же самое, что и PyObject_GetAttr(), но attr_name указывается как строка const char* в кодировке UTF-8 байт, а не как PyObject*.

PyObject *PyObject_GenericGetAttr(PyObject *o, PyObject *name)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)
Part of the Стабильный 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 Стабильный ABI.

Это то же самое, что и PyObject_SetAttr(), но attr_name указывается как строка const char* в кодировке UTF-8 байт, а не как PyObject*.

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

int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)
Part of the Стабильный 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)

Это то же самое, что и PyObject_DelAttr(), но attr_name указывается как строка const char* в кодировке UTF-8 байт, а не как PyObject*.

PyObject *PyObject_GenericGetDict(PyObject *o, void *context)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI since version 3.10.

Универсальная реализация для получения дескриптора __dict__. При необходимости он создает словарь.

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

В случае сбоя возвращает NULL с установленным исключением.

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

int PyObject_GenericSetDict(PyObject *o, PyObject *value, void *context)
Part of the Стабильный ABI since version 3.7.

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

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

PyObject **_PyObject_GetDictPtr(PyObject *obj)

Возвращает указатель на __dict__ объекта obj. Если нет __dict__, верните NULL без установки исключения.

Этой функции может потребоваться выделить память для словаря, поэтому может оказаться более эффективным вызвать PyObject_GetAttr() при обращении к атрибуту объекта.

PyObject *PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)
Возвращаемое значение: Новая ссылка. Part of the Стабильный 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 Стабильный ABI.

Сравните значения o1 и o2, используя операцию, указанную в opid, например PyObject_RichCompare(), но возвращает -1 при ошибке, 0 если результат ложный, 1 в противном случае.

Примечание

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

PyObject *PyObject_Format(PyObject *obj, PyObject *format_spec)
Part of the Стабильный ABI.

Отформатируйте obj с помощью format_spec. Это эквивалентно выражению Python format(obj, format_spec).

format_spec может быть NULL. В этом случае вызов эквивалентен format(obj). В случае успеха возвращает отформатированную строку, в случае неудачи - NULL.

PyObject *PyObject_Repr(PyObject *o)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

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

PyObject *PyObject_ASCII(PyObject *o)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

PyObject *PyObject_Str(PyObject *o)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

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

PyObject *PyObject_Bytes(PyObject *o)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

int PyObject_IsSubclass(PyObject *derived, PyObject *cls)
Part of the Стабильный ABI.

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

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

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

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

int PyObject_IsInstance(PyObject *inst, PyObject *cls)
Part of the Стабильный 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 Стабильный ABI.

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

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

Py_hash_t PyObject_HashNotImplemented(PyObject *o)
Part of the Стабильный ABI.

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

int PyObject_IsTrue(PyObject *o)
Part of the Стабильный ABI.

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

int PyObject_Not(PyObject *o)
Part of the Стабильный ABI.

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

PyObject *PyObject_Type(PyObject *o)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

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 Стабильный 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)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)
Part of the Стабильный ABI.

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

int PyObject_DelItem(PyObject *o, PyObject *key)
Part of the Стабильный ABI.

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

PyObject *PyObject_Dir(PyObject *o)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

PyObject *PyObject_GetIter(PyObject *o)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

PyObject *PyObject_GetAIter(PyObject *o)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI since version 3.10.

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

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

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