Протокол объектов¶Object Protocol
-
PyObject *Py_GetConstant(unsigned int constant_id)¶
- Часть Stable 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 все эти константы являются бессмертными.
-
Py_CONSTANT_NONE¶
-
PyObject *Py_GetConstantBorrowed(unsigned int constant_id)¶
- Часть Stable 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)¶
- Часть Stable ABI, начиная с версии 3.13.
Возвращает
1, если o имеет атрибут attr_name, и0в противном случае. Это эквивалентно выражению Pythonhasattr(o, attr_name). В случае ошибки возвращает-1.Добавлено в версии 3.13.
-
int PyObject_HasAttrStringWithError(PyObject *o, const char *attr_name)¶
- Часть Stable ABI, начиная с версии 3.13.
То же, что и
PyObject_HasAttrWithError(), но attr_name задаётся в виде const char* UTF-8 строки байтов, а не PyObject*.Добавлено в версии 3.13.
-
int PyObject_HasAttr(PyObject *o, PyObject *attr_name)¶
- Часть Stable 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)¶
- Часть Stable ABI.
То же, что и
PyObject_HasAttr(), но attr_name задаётся в виде const char* UTF-8 строки байтов, а не PyObject*.Примечание
Исключения, возникающие при вызове методов
__getattr__()и__getattribute__()или при создании временного объектаstr, молча игнорируются. Для корректной обработки ошибок используйтеPyObject_HasAttrStringWithError(),PyObject_GetOptionalAttrString()илиPyObject_GetAttrString().
-
PyObject *PyObject_GetAttr(PyObject *o, PyObject *attr_name)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Извлекает атрибут с именем attr_name из объекта o. Возвращает значение атрибута в случае успеха или
NULLв случае ошибки. Это эквивалентно выражению Pythono.attr_name.Если отсутствие атрибута не должно рассматриваться как ошибка, можно использовать
PyObject_GetOptionalAttr().
-
PyObject *PyObject_GetAttrString(PyObject *o, const char *attr_name)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
То же, что и
PyObject_GetAttr(), но attr_name задаётся в виде const char* UTF-8 строки байтов, а не PyObject*.Если отсутствие атрибута не должно рассматриваться как ошибка, можно использовать
PyObject_GetOptionalAttrString().
-
int PyObject_GetOptionalAttr(PyObject *obj, PyObject *attr_name, PyObject **result);¶
- Часть Stable 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);¶
- Часть Stable ABI, начиная с версии 3.13.
То же, что и
PyObject_GetOptionalAttr(), но attr_name задаётся в виде const char* UTF-8 строки байтов, а не PyObject*.Добавлено в версии 3.13.
-
PyObject *PyObject_GenericGetAttr(PyObject *o, PyObject *name)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Обобщённая функция получения атрибута, предназначенная для размещения в слоте
tp_getattroобъекта типа. Она ищет дескриптор в словаре классов в MRO объекта, а также атрибут в__dict__объекта (если он есть). Как описано в Реализация дескрипторов, дескрипторы данных имеют приоритет над атрибутами экземпляра, а дескрипторы не данных – нет. В противном случае вызываетсяAttributeError.
-
int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)¶
- Часть Stable ABI.
Устанавливает значение атрибута с именем attr_name для объекта o равным значению v. В случае ошибки возбуждает исключение и возвращает
-1; при успехе возвращает0. Это эквивалент инструкции Pythono.attr_name = v.Если v равно
NULL, атрибут удаляется. Такое поведение устарело в пользу использованияPyObject_DelAttr(), однако в настоящее время нет планов по его удалению.
-
int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)¶
- Часть Stable ABI.
То же, что и
PyObject_SetAttr(), но attr_name задаётся в виде const char* UTF-8 строки байтов, а не PyObject*.Если v равно
NULL, атрибут удаляется, но эта возможность устарела в пользу использованияPyObject_DelAttrString().Количество различных имён атрибутов, передаваемых в эту функцию, должно быть небольшим; обычно для этого используется статически выделенная строка в качестве attr_name. Для имён атрибутов, неизвестных на этапе компиляции, предпочтительнее напрямую вызывать
PyUnicode_FromString()иPyObject_SetAttr(). Подробнее см.PyUnicode_InternFromString(), который может использоваться внутри для создания объекта ключа.
-
int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)¶
- Часть Stable ABI.
Универсальная функция установки и удаления атрибута, предназначенная для помещения в слот
tp_setattroобъекта типа. Она ищет дескриптор данных в словаре классов в MRO объекта, и если он найден, то приоритет имеет установка или удаление атрибута в словаре экземпляра. В противном случае атрибут устанавливается или удаляется в__dict__объекта (если он есть). При успехе возвращается0, иначе возбуждаетсяAttributeErrorи возвращается-1.
-
int PyObject_DelAttr(PyObject *o, PyObject *attr_name)¶
- Часть Stable ABI, начиная с версии 3.13.
Удаляет атрибут с именем attr_name у объекта o. При ошибке возвращает
-1. Это эквивалент инструкции Pythondel o.attr_name.
-
int PyObject_DelAttrString(PyObject *o, const char *attr_name)¶
- Часть Stable ABI, начиная с версии 3.13.
То же, что и
PyObject_DelAttr(), но attr_name задаётся в виде const char* UTF-8 строки байтов, а не PyObject*.Количество различных имён атрибутов, передаваемых в эту функцию, должно быть небольшим; обычно для этого используется статически выделенная строка в качестве attr_name. Для имён атрибутов, неизвестных на этапе компиляции, предпочтительнее напрямую вызывать
PyUnicode_FromString()иPyObject_DelAttr(). Подробнее см.PyUnicode_InternFromString(), который может использоваться внутри для создания объекта ключа для поиска.
-
PyObject *PyObject_GenericGetDict(PyObject *o, void *context)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI начиная с версии 3.10.
Универсальная реализация геттера дескриптора
__dict__. При необходимости создаёт словарь.Эту функцию также можно вызывать для получения
__dict__объекта o. При вызове передайтеNULLдля context. Поскольку эта функция может выделять память для словаря, при обращении к атрибуту объекта эффективнее вызыватьPyObject_GetAttr().В случае ошибки возвращает
NULLс установленным исключением.Добавлено в версии 3.3.
-
int PyObject_GenericSetDict(PyObject *o, PyObject *value, void *context)¶
- Часть Stable 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)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Сравнивает значения o1 и o2 с помощью операции, заданной opid, которая должна быть одной из
Py_LT,Py_LE,Py_EQ,Py_NE,Py_GTилиPy_GE, соответствующих<,<=,==,!=,>или>=соответственно. Это эквивалент выражения Pythono1 op o2, гдеop– оператор, соответствующий opid. При успехе возвращает результат сравнения, при ошибке –NULL.
-
int PyObject_RichCompareBool(PyObject *o1, PyObject *o2, int opid)¶
- Часть Stable 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)¶
- Часть Stable ABI.
Форматирует obj с помощью format_spec. Эквивалентно выражению Python
format(obj, format_spec).format_spec может быть
NULL. В этом случае вызов эквивалентенformat(obj). Возвращает форматированную строку в случае успеха иNULLпри неудаче.
-
PyObject *PyObject_Repr(PyObject *o)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Вычисляет строковое представление объекта o. Возвращает строковое представление в случае успеха и
NULLпри неудаче. Это эквивалент выражения Pythonrepr(o). Вызывается встроенной функциейrepr().Если аргумент равен
NULL, возвращает строку'<NULL>'.Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, помогающее гарантировать, что она не игнорирует активное исключение без уведомления.
-
PyObject *PyObject_ASCII(PyObject *o)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Как и
PyObject_Repr(), вычисляет строковое представление объекта o, но экранирует не-ASCII символы в строке, возвращаемойPyObject_Repr(), с помощью управляющих последовательностей\x,\uили\U. Это создаёт строку, похожую на ту, что возвращаетсяPyObject_Repr()в Python 2. Вызывается встроенной функциейascii().Если аргумент равен
NULL, возвращает строку'<NULL>'.
-
PyObject *PyObject_Str(PyObject *o)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Вычисляет строковое представление объекта o. Возвращает строковое представление в случае успеха и
NULLпри неудаче. Это эквивалент выражения Pythonstr(o). Вызывается встроенной функциейstr()и, следовательно, функциейprint().Если аргумент равен
NULL, возвращает строку'<NULL>'.Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, помогающее гарантировать, что она не игнорирует активное исключение без уведомления.
-
PyObject *PyObject_Bytes(PyObject *o)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Вычисляет байтовое представление объекта o. При неудаче возвращается
NULL, а при успехе – объект bytes. Это эквивалентно выражению Pythonbytes(o), когда o не является целым числом. В отличие отbytes(o), возникает TypeError, когда o является целым числом вместо объекта bytes, инициализированного нулями.Если аргумент равен
NULL, возвращает объектbytesb'<NULL>'.
-
int PyObject_IsSubclass(PyObject *derived, PyObject *cls)¶
- Часть 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)¶
- Часть 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)¶
- Часть Stable ABI.
Вычисляет и возвращает хеш-значение объекта o. При неудаче возвращает
-1. Это эквивалент выражения Pythonhash(o).Изменено в версии 3.2: Тип возвращаемого значения теперь Py_hash_t. Это знаковое целое число того же размера, что и
Py_ssize_t.
-
Py_hash_t PyObject_HashNotImplemented(PyObject *o)¶
- Часть Stable ABI.
Set a
TypeErrorindicating thattype(o)is not hashable and return-1. This function receives special treatment when stored in atp_hashslot, allowing a type to explicitly indicate to the interpreter that it is not hashable.
-
int PyObject_IsTrue(PyObject *o)¶
- Часть Stable ABI.
Возвращает
1, если объект o считается истинным, и0в противном случае. Эквивалентно выражению Pythonnot not o. При неудаче возвращает-1.
-
int PyObject_Not(PyObject *o)¶
- Часть Stable ABI.
Возвращает
0, если объект o считается истинным, и1в противном случае. Эквивалентно выражению Pythonnot o. При неудаче возвращает-1.
-
PyObject *PyObject_Type(PyObject *o)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
When o is non-
NULL, returns a type object corresponding to the object type of object o. On failure, raisesSystemErrorand returnsNULL. This is equivalent to the Python expressiontype(o). This function creates a new strong reference to the return value. There’s really no reason to use this function instead of thePy_TYPE()function, which returns a pointer of type PyTypeObject*, except when a new strong reference is needed.
-
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)¶
- Часть Stable 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)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Возвращает элемент o, соответствующий объекту key, или
NULLпри неудаче. Эквивалентно выражению Pythono[key].
-
int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)¶
- Часть Stable ABI.
Сопоставляет объекту key значение v. Возбуждает исключение и возвращает
-1при неудаче; возвращает0в случае успеха. Эквивалентно инструкции Pythono[key] = v. Эта функция не крадёт ссылку на v.
-
int PyObject_DelItem(PyObject *o, PyObject *key)¶
- Часть Stable ABI.
Удаляет сопоставление для объекта key из объекта o. Возвращает
-1при неудаче. Эквивалентно инструкции Pythondel o[key].
-
int PyObject_DelItemString(PyObject *o, const char *key)¶
- Часть Stable ABI.
То же, что и
PyObject_DelItem(), но key задаётся как const char* строка байтов в кодировке UTF-8, а не как PyObject*.
-
PyObject *PyObject_Dir(PyObject *o)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Эквивалентно выражению Python
dir(o), возвращает (возможно пустой) список строк, подходящих для аргумента-объекта, илиNULL, если произошла ошибка. Если аргумент равенNULL, это похоже наdir()в Python, возвращает имена текущих локальных переменных; в этом случае, если нет активного фрейма выполнения, возвращаетсяNULL, ноPyErr_Occurred()вернёт false.
-
PyObject *PyObject_GetIter(PyObject *o)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Эквивалентно выражению Python
iter(o). Возвращает новый итератор для аргумента-объекта, или сам объект, если объект уже является итератором. ВозбуждаетTypeErrorи возвращаетNULL, если объект не может быть итерирован.
-
PyObject *PyObject_SelfIter(PyObject *obj)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
This is equivalent to the Python
__iter__(self): return selfmethod. It is intended for iterator types, to be used in thePyTypeObject.tp_iterslot.
-
PyObject *PyObject_GetAIter(PyObject *o)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI начиная с версии 3.10.
Эквивалентно выражению Python
aiter(o). Принимает объектAsyncIterableи возвращает для негоAsyncIterator. Обычно это новый итератор, но если аргумент являетсяAsyncIterator, возвращает самого себя. ВозбуждаетTypeErrorи возвращаетNULL, если объект не может быть итерирован.Добавлено в версии 3.10.
-
void *PyObject_GetTypeData(PyObject *o, PyTypeObject *cls)¶
- Часть Stable ABI начиная с версии 3.12.
Получить указатель на данные, специфичные для подкласса, зарезервированные для cls.
Объект o должен быть экземпляром cls, а cls должен быть создан с использованием отрицательного
PyType_Spec.basicsize. Python не проверяет это.При ошибке устанавливает исключение и возвращает
NULL.Добавлено в версии 3.12.
-
Py_ssize_t PyType_GetTypeDataSize(PyTypeObject *cls)¶
- Часть Stable 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.TypeErrorвозбуждается, если у o не установленPy_TPFLAGS_ITEMS_AT_END.Добавлено в версии 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.