Протокол объектов
-
PyObject *Py_GetConstant(unsigned int constant_id) -
Входит в Стабильный ABI начиная с версии 3.13.
Получить сильную ссылку на константу.
Установить исключение и вернуть
NULL, если constant_id недопустим.constant_id должен быть одним из следующих идентификаторов констант:
Идентификатор константы
Значение
Возвращаемый объект
-
Py_CONSTANT_NONE
0-
Py_CONSTANT_FALSE
1-
Py_CONSTANT_TRUE
2-
Py_CONSTANT_ELLIPSIS
3-
Py_CONSTANT_NOT_IMPLEMENTED
4-
Py_CONSTANT_ZERO
50-
Py_CONSTANT_ONE
61-
Py_CONSTANT_EMPTY_STR
7''-
Py_CONSTANT_EMPTY_BYTES
8b''-
Py_CONSTANT_EMPTY_TUPLE
9()Числовые значения указаны только для проектов, в которых нельзя использовать идентификаторы констант.
Добавлено в версии 3.13.
Особенность реализации CPython: в CPython все эти константы являются бессмертными.
-
-
PyObject *Py_GetConstantBorrowed(unsigned int constant_id) -
Входит в Стабильный ABI начиная с версии 3.13.
Аналогично
Py_GetConstant(), но возвращает заимствованную ссылку.Эта функция предназначена главным образом для обратной совместимости: для нового кода рекомендуется использовать
Py_GetConstant().Ссылка заимствуется у интерпретатора и действительна до его завершения.
Добавлено в версии 3.13.
-
PyObject *Py_NotImplemented -
Синглтон
NotImplemented, используемый для обозначения того, что операция не реализована для данной комбинации типов.
-
Py_RETURN_NOTIMPLEMENTED -
Правильно обрабатывает возврат
Py_NotImplementedиз функции C (то есть создает новую сильную ссылку наNotImplementedи возвращает ее).
-
Py_PRINT_RAW -
Флаг для использования с несколькими функциями, выводящими объект (например,
PyObject_Print()иPyFile_WriteObject()). Если он передан, эти функции используютstr()объекта вместоrepr().
-
int PyObject_Print(PyObject *o, FILE *fp, int flags) -
Вывести объект o в файл fp. При ошибке возвращает
-1. Аргумент flags используется для включения определенных параметров вывода. В настоящее время поддерживается только параметрPy_PRINT_RAW; если он задан, выводитсяstr()объекта вместоrepr().
-
int PyObject_HasAttrWithError(PyObject *o, PyObject *attr_name) -
Входит в Стабильный ABI начиная с версии 3.13.
Возвращает
1, если у o есть атрибут attr_name, и0в противном случае. Это эквивалентно выражению Pythonhasattr(o, attr_name). При ошибке возвращает-1.Добавлено в версии 3.13.
-
int PyObject_HasAttrStringWithError(PyObject *o, const char *attr_name) -
Входит в Стабильный ABI начиная с версии 3.13.
Это та же функция, что и
PyObject_HasAttrWithError(), но attr_name задается как строка байтов в кодировке UTF-8 типа const char*, а не как PyObject*.Добавлено в версии 3.13.
-
int PyObject_HasAttr(PyObject *o, PyObject *attr_name) -
Входит в Стабильный ABI.
Возвращает
1, если у o есть атрибут attr_name, и0в противном случае. Эта функция всегда завершается успешно.Примечание
Исключения, возникающие при вызове методов
__getattr__()и__getattribute__(), не передаются вызывающему коду, а передаются вsys.unraisablehook(). Для корректной обработки ошибок используйте вместо этогоPyObject_HasAttrWithError(),PyObject_GetOptionalAttr()илиPyObject_GetAttr().
-
int PyObject_HasAttrString(PyObject *o, const char *attr_name) -
Входит в Стабильный ABI.
Это та же функция, что и
PyObject_HasAttr(), но attr_name задается как строка байтов в кодировке UTF-8 типа const char*, а не как PyObject*.Примечание
Исключения, возникающие при вызове методов
__getattr__()и__getattribute__()или при создании временного объектаstr, молча игнорируются. Для корректной обработки ошибок используйте вместо этогоPyObject_HasAttrStringWithError(),PyObject_GetOptionalAttrString()илиPyObject_GetAttrString().
-
PyObject *PyObject_GetAttr(PyObject *o, PyObject *attr_name) -
Возвращаемое значение: новая ссылка. Входит в Стабильный ABI.
Получить из объекта o атрибут с именем attr_name. При успешном выполнении возвращает значение атрибута, при ошибке —
NULL. Эквивалентное выражение Python:o.attr_name.Если отсутствие атрибута не следует считать ошибкой, можно вместо этого использовать
PyObject_GetOptionalAttr().
-
PyObject *PyObject_GetAttrString(PyObject *o, const char *attr_name) -
Возвращаемое значение: новая ссылка. Входит в Стабильный ABI.
Это та же функция, что и
PyObject_GetAttr(), но attr_name задается как строка байтов в кодировке UTF-8 типа const char*, а не как PyObject*.Если отсутствие атрибута не следует считать ошибкой, можно вместо этого использовать
PyObject_GetOptionalAttrString().
-
int PyObject_GetOptionalAttr(PyObject *obj, PyObject *attr_name, PyObject **result); -
Входит в Стабильный ABI начиная с версии 3.13.
Вариант
PyObject_GetAttr(), который не вызывает исключениеAttributeError, если атрибут не найден.Если атрибут найден, вернуть
1и установить *result в новую сильную ссылку на атрибут. Если атрибут не найден, вернуть0и установить *result вNULL; исключениеAttributeErrorподавляется. Если возникает исключение, отличное отAttributeError, вернуть-1и установить *result вNULL.Добавлено в версии 3.13.
-
int PyObject_GetOptionalAttrString(PyObject *obj, const char *attr_name, PyObject **result); -
Входит в Стабильный ABI начиная с версии 3.13.
Это та же функция, что и
PyObject_GetOptionalAttr(), но attr_name задается как строка байтов в кодировке UTF-8 типа const char*, а не как PyObject*.Добавлено в версии 3.13.
-
PyObject *PyObject_GenericGetAttr(PyObject *o, PyObject *name) -
Возвращаемое значение: новая ссылка. Входит в Стабильный ABI.
Общая функция получения атрибута, предназначенная для размещения в слоте
tp_getattroобъекта типа. Она ищет дескриптор в словаре классов MRO объекта, а также атрибут в__dict__объекта (если он есть). Как описано в разделе Реализация дескрипторов, дескрипторы данных имеют приоритет перед атрибутами экземпляра, а дескрипторы, не являющиеся дескрипторами данных, — нет. В противном случае вызывается исключениеAttributeError.
-
int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v) -
Входит в Стабильный ABI.
Установить для объекта o значение v атрибута с именем attr_name. При ошибке вызвать исключение и вернуть
-1; при успехе вернуть0. Эквивалентный оператор Python:o.attr_name = v.Если v равен
NULL, атрибут удаляется. Такое поведение объявлено устаревшим в пользу использованияPyObject_DelAttr(), однако в настоящее время планов удалять его нет.
-
int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v) -
Входит в Стабильный ABI.
Это та же функция, что и
PyObject_SetAttr(), но attr_name задается как строка байтов в кодировке UTF-8 типа const char*, а не как PyObject*.Если v равен
NULL, атрибут удаляется, однако эта возможность объявлена устаревшей в пользу использованияPyObject_DelAttrString().Следует свести к минимуму количество различных имен атрибутов, передаваемых этой функции; обычно для этого в качестве attr_name используют статически выделенную строку. Для имен атрибутов, неизвестных во время компиляции, предпочтительнее напрямую вызывать
PyUnicode_FromString()иPyObject_SetAttr(). Дополнительные сведения см. в описанииPyUnicode_InternFromString(), которую можно использовать внутри для создания объекта-ключа.
-
int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value) -
Входит в Стабильный ABI.
Общая функция установки и удаления атрибутов, предназначенная для размещения в слоте
tp_setattroобъекта типа. Она ищет дескриптор данных в словаре классов MRO объекта; если такой дескриптор найден, он имеет приоритет перед установкой или удалением атрибута в словаре экземпляра. В противном случае атрибут устанавливается или удаляется в__dict__объекта (если он есть). При успехе возвращается0, в противном случае вызывается исключениеAttributeErrorи возвращается-1.
-
int PyObject_DelAttr(PyObject *o, PyObject *attr_name) -
Входит в Стабильный ABI начиная с версии 3.13.
Удалить у объекта o атрибут с именем attr_name. При ошибке возвращает
-1. Эквивалентный оператор Python:del o.attr_name.
-
int PyObject_DelAttrString(PyObject *o, const char *attr_name) -
Входит в Стабильный ABI начиная с версии 3.13.
Это та же функция, что и
PyObject_DelAttr(), но attr_name задается как строка байтов в кодировке UTF-8 типа const char*, а не как PyObject*.Следует свести к минимуму количество различных имен атрибутов, передаваемых этой функции; обычно для этого в качестве attr_name используют статически выделенную строку. Для имен атрибутов, неизвестных во время компиляции, предпочтительнее напрямую вызывать
PyUnicode_FromString()иPyObject_DelAttr(). Дополнительные сведения см. в описанииPyUnicode_InternFromString(), которую можно использовать внутри для создания объекта-ключа поиска.
-
PyObject *PyObject_GenericGetDict(PyObject *o, void *context) -
Возвращаемое значение: новая ссылка. Входит в Стабильный ABI начиная с версии 3.10.
Общая реализация функции получения для дескриптора
__dict__. При необходимости создает словарь.Эту функцию также можно вызвать для получения
__dict__объекта o. При вызове передайтеNULLв качестве context. Поскольку этой функции может потребоваться выделить память для словаря, при обращении к атрибуту объекта эффективнее может оказаться вызовPyObject_GetAttr().При ошибке возвращает
NULLс установленным исключением.Добавлено в версии 3.3.
-
int PyObject_GenericSetDict(PyObject *o, PyObject *value, void *context) -
Входит в Стабильный ABI начиная с версии 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) -
Возвращаемое значение: новая ссылка. Входит в Стабильный 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) -
Входит в Стабильный 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) -
Входит в Стабильный ABI.
Форматирует obj с использованием format_spec. Эквивалентное выражение Python:
format(obj, format_spec).format_spec может быть равен
NULL. В этом случае вызов эквивалентенformat(obj). При успехе возвращает форматированную строку, при ошибке —NULL.
-
PyObject *PyObject_Repr(PyObject *o) -
Возвращаемое значение: новая ссылка. Входит в Стабильный ABI.
Вычисляет строковое представление объекта o. При успехе возвращает строковое представление, при ошибке —
NULL. Эквивалентное выражение Python:repr(o). Вызывается встроенной функциейrepr().Изменено в версии 3.4: теперь эта функция содержит отладочную проверку, помогающую убедиться, что активное исключение не отбрасывается без уведомления.
-
PyObject *PyObject_ASCII(PyObject *o) -
Возвращаемое значение: новая ссылка. Входит в Стабильный ABI.
Как и
PyObject_Repr(), вычисляет строковое представление объекта o, но экранирует символы не ASCII в строке, возвращаемойPyObject_Repr(), с помощью escape-последовательностей\x,\uили\U. В результате получается строка, похожая на ту, которую в Python 2 возвращаетPyObject_Repr(). Вызывается встроенной функциейascii().
-
PyObject *PyObject_Str(PyObject *o) -
Возвращаемое значение: новая сильная ссылка. Часть стабильного ABI.
Вычисляет строковое представление объекта o. В случае успеха возвращает строковое представление, в случае ошибки —
NULL. Эквивалентно выражению Pythonstr(o). Вызывается встроенной функциейstr()и, следовательно, функциейprint().Изменено в версии 3.4: Теперь эта функция включает отладочную проверку, помогающую убедиться, что активное исключение не отбрасывается без уведомления.
-
PyObject *PyObject_Bytes(PyObject *o) -
Возвращаемое значение: новая сильная ссылка. Часть стабильного ABI.
Вычисляет байтовое представление объекта o. В случае ошибки возвращается
NULL, а в случае успеха — объект bytes. Эквивалентно выражению Pythonbytes(o), если o не является целым числом. В отличие отbytes(o), если o является целым числом, вызывается TypeError вместо создания объекта bytes, заполненного нулями.
-
int PyObject_IsSubclass(PyObject *derived, PyObject *cls) -
Часть стабильного 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) -
Часть стабильного 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) -
Часть стабильного ABI.
Вычисляет и возвращает хеш-значение объекта o. В случае ошибки возвращает
-1. Эквивалентно выражению Pythonhash(o).Изменено в версии 3.2: Теперь тип возвращаемого значения — Py_hash_t. Это знаковое целое число того же размера, что и
Py_ssize_t.
-
Py_hash_t PyObject_HashNotImplemented(PyObject *o) -
Часть стабильного ABI.
Устанавливает
TypeError, указывая, чтоtype(o)не является хешируемым, и возвращает-1. Эта функция обрабатывается особым образом, когда хранится в слотеtp_hash, что позволяет типу явно сообщить интерпретатору, что он не является хешируемым.
-
int PyObject_IsTrue(PyObject *o) -
Часть стабильного ABI.
Возвращает
1, если объект o считается истинным, и0в противном случае. Эквивалентно выражению Pythonnot not o. В случае ошибки возвращает-1.
-
int PyObject_Not(PyObject *o) -
Часть стабильного ABI.
Возвращает
0, если объект o считается истинным, и1в противном случае. Эквивалентно выражению Pythonnot o. В случае ошибки возвращает-1.
-
PyObject *PyObject_Type(PyObject *o) -
Возвращаемое значение: новая сильная ссылка. Часть стабильного ABI.
Если o не является
NULL, возвращает объект типа, соответствующий типу объекта o. В случае ошибки вызываетSystemErrorи возвращаетNULL. Эквивалентно выражению Pythontype(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) -
Часть стабильного ABI.
Возвращает длину объекта o. Если объект o поддерживает протоколы последовательности и отображения, возвращается длина последовательности. В случае ошибки возвращается
-1. Эквивалентно выражению Pythonlen(o).
-
Py_ssize_t PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue) -
Возвращает оценочную длину объекта o. Сначала пытается вернуть фактическую длину, затем оценку с использованием
__length_hint__()и, наконец, возвращает значение по умолчанию. В случае ошибки возвращает-1. Эквивалентно выражению Pythonoperator.length_hint(o, defaultvalue).Добавлено в версии 3.4.
-
PyObject *PyObject_GetItem(PyObject *o, PyObject *key) -
Возвращаемое значение: новая сильная ссылка. Часть стабильного ABI.
Возвращает элемент объекта o, соответствующий объекту key, или
NULLв случае ошибки. Эквивалентно выражению Pythono[key].
-
int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v) -
Часть стабильного ABI.
Сопоставляет объект key со значением v. В случае ошибки вызывает исключение и возвращает
-1; в случае успеха возвращает0. Эквивалентно инструкции Pythono[key] = v. Эта функция не забирает ссылку на v.
-
int PyObject_DelItem(PyObject *o, PyObject *key) -
Часть стабильного ABI.
Удаляет из объекта o сопоставление для объекта key. В случае ошибки возвращает
-1. Эквивалентно инструкции Pythondel o[key].
-
int PyObject_DelItemString(PyObject *o, const char *key) -
Часть стабильного ABI.
Аналогична
PyObject_DelItem(), но key задаётся в виде строки байтов UTF-8 типа const char*, а не типа PyObject*.
-
PyObject *PyObject_Dir(PyObject *o) -
Возвращаемое значение: новая сильная ссылка. Часть стабильного ABI.
Эквивалентно выражению Python
dir(o): возвращает (возможно, пустой) список строк, подходящих для переданного объекта, илиNULLв случае ошибки. Если аргумент —NULL, функция работает как инструкция Pythondir()и возвращает имена текущих локальных переменных; в этом случае, если активного кадра выполнения нет, возвращаетсяNULL, ноPyErr_Occurred()вернёт false.
-
PyObject *PyObject_GetIter(PyObject *o) -
Возвращаемое значение: новая сильная ссылка. Часть стабильного ABI.
Эквивалентно выражению Python
iter(o). Возвращает новый итератор для переданного объекта или сам объект, если он уже является итератором. Если объект не поддерживает итерацию, вызываетTypeErrorи возвращаетNULL.
-
PyObject *PyObject_SelfIter(PyObject *obj) -
Возвращаемое значение: новая сильная ссылка. Часть стабильного ABI.
Эквивалентна методу Python
__iter__(self): return self. Предназначена для типов итераторов и используется в слотеPyTypeObject.tp_iter.
-
PyObject *PyObject_GetAIter(PyObject *o) -
Возвращаемое значение: новая сильная ссылка. Часть стабильного ABI начиная с версии 3.10.
Эквивалентно выражению Python
aiter(o). Принимает объектAsyncIterableи возвращает для негоAsyncIterator. Обычно это новый итератор, но если аргумент являетсяAsyncIterator, функция возвращает его самого. Если объект не поддерживает итерацию, вызываетTypeErrorи возвращаетNULL.Добавлено в версии 3.10.
-
void *PyObject_GetTypeData(PyObject *o, PyTypeObject *cls) -
Часть стабильного ABI начиная с версии 3.12.
Возвращает указатель на данные, зарезервированные для подкласса cls.
Объект o должен быть экземпляром cls, а cls должен быть создан с отрицательным значением
PyType_Spec.basicsize. Python это не проверяет.В случае ошибки устанавливает исключение и возвращает
NULL.Добавлено в версии 3.12.
-
Py_ssize_t PyType_GetTypeDataSize(PyTypeObject *cls) -
Часть стабильного ABI начиная с версии 3.12.
Возвращает размер области памяти экземпляра, зарезервированной для cls, то есть размер памяти, указатель на которую возвращает
PyObject_GetTypeData().Он может быть больше размера, запрошенного с помощью
-PyType_Spec.basicsize; безопасно использовать этот больший размер (например, сmemset()).Тип cls должен быть создан с отрицательным значением
PyType_Spec.basicsize. Python это не проверяет.В случае ошибки устанавливает исключение и возвращает отрицательное значение.
Добавлено в версии 3.12.
-
void *PyObject_GetItemData(PyObject *o) -
Возвращает указатель на данные отдельного элемента для класса с флагом
Py_TPFLAGS_ITEMS_AT_END.В случае ошибки устанавливает исключение и возвращает
NULL. Если у o не установлен флагPy_TPFLAGS_ITEMS_AT_END, вызываетсяTypeError.Добавлено в версии 3.12.
-
int PyObject_VisitManagedDict(PyObject *obj, visitproc visit, void *arg) -
Обходит управляемый словарь объекта obj.
Эту функцию можно вызывать только из функции обхода типа, у которого установлен флаг
Py_TPFLAGS_MANAGED_DICT.Добавлено в версии 3.13.
-
void PyObject_ClearManagedDict(PyObject *obj) -
Очищает управляемый словарь объекта obj.
Эту функцию можно вызывать только из функции обхода типа, у которого установлен флаг
Py_TPFLAGS_MANAGED_DICT.Добавлено в версии 3.13.
© 2001–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/c-api/object.html