Объектный протокол¶
- 
PyObject* 
Py_NotImplemented¶ Синглетон
NotImplemented, используется для сигнализация, что операция не реализована для данной комбинации типа.
- 
Py_RETURN_NOTIMPLEMENTED¶ Правильно обрабатывайте возврат
Py_NotImplementedиз функции C (т.е. увеличивает число ссылок NotImplemented и возвращает его).
- 
int 
PyObject_Print(PyObject *o, FILE *fp, int flags)¶ Печать o объекта для fp файла. Возвращает
-1при ошибке. Аргумент flags используется для включения определенных параметров печати. В настоящее время поддерживается толькоPy_PRINT_RAW; если указано, вместоrepr()записываетсяstr()объекта.
- 
int 
PyObject_HasAttr(PyObject *o, PyObject *attr_name)¶ Возвращает
1, если у o есть атрибут attr_name, и0в противном случае. Python эквивалентhasattr(o, attr_name)выражению. Эта функция всегда выполняется успешно.Следует отметить, что исключения, возникающие при вызове методов
__getattr__()и__getattribute__(), будут подавлены. Чтобы получить отчет об ошибках, используйтеPyObject_GetAttr().
- 
int 
PyObject_HasAttrString(PyObject *o, const char *attr_name)¶ Возвращает
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.
Извлечение атрибута с именем attr_name из объекта o. Возвращает значение атрибута при успехе или
NULLпри сбое. Это эквивалент Python выраженияo.attr_name. 
- 
PyObject* 
PyObject_GetAttrString(PyObject *o, const char *attr_name)¶ - Return value: New reference.
Извлечение атрибута с именем attr_name из объекта o. Возвращает значение атрибута при успехе или
NULLпри сбое. Это эквивалент Python выраженияo.attr_name. 
- 
PyObject* 
PyObject_GenericGetAttr(PyObject *o, PyObject *name)¶ - Return value: New reference.
Универсальная функция получения атрибута, предназначенная для ввода в
tp_getattroслот типа объекта. Ищет дескриптор в словаре классов в MRO объекта, а также атрибут в__dict__объекте (при его наличии). Как обрисовано в общих чертах в Реализация дескрипторов, данные дескрипторы имеют преимущество перед атрибутами экземпляра, в то время как не предоставленные дескрипторы этого не делают. В противном случае поднимаетсяAttributeError. 
- 
int 
PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)¶ Установить значение атрибута по имени 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)¶ Установить значение атрибута по имени attr_name, для объекта o, значение v. Создать исключение и вернуть
-1при сбое; возвращает0при успехе. Это эквивалент Python инструкцииo.attr_name = v.Если v
NULL, атрибут удаляется, однако эта функция устаревает в пользу использованияPyObject_DelAttrString().
- 
int 
PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)¶ Общая функция установки и удаления атрибута, которая должна быть помещена в
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.
Общая реализация для геттера
__dict__дескриптора. При необходимости он создает словарь.Добавлено в версии 3.3.
 
- 
int 
PyObject_GenericSetDict(PyObject *o, PyObject *value, void *context)¶ Общая реализация для сеттера
__dict__дескриптора. Эта реализация не позволяет удалить словарь.Добавлено в версии 3.3.
- 
PyObject* 
PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)¶ - Return value: New reference.
Сравнить значения 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)¶ Сравнение значений o1 и o2, используя операцию, определенную opid, которая должна быть одной из
Py_LT,Py_LE,Py_EQ,Py_NE,Py_GTилиPy_GE, соответствуя<,<=,==,!=,>или>=соответственно. Возвращает-1при ошибке,0если результат имеет значение false,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.
Вычислить строку представления o объектов. Возвращает строку представление при успехе,
NULLпри неудаче. Это эквивалент выражения Pythonrepr(o). Вызывается встроенной функциейrepr().Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, чтобы убедиться, что она не отбрасывает активное исключение.
 
- 
PyObject* 
PyObject_ASCII(PyObject *o)¶ - Return value: New reference.
Как
PyObject_Repr(), вычисляет представление строки объекта o, но экранирование не ASCII символов в строку возвращеннуюPyObject_Repr()с\x,\uили экранированиями\U. При этом генерируется строка, аналогичный возвращеннойPyObject_Repr()в Python 2. Вызывается встроенной функциейascii(). 
- 
PyObject* 
PyObject_Str(PyObject *o)¶ - Return value: New reference.
Вычислить строковое представление o объектов. Возвращает строковое представление при успехе,
NULLпри неудаче. Это Python эквивалент выраженияstr(o). Вызывается встроенной функциейstr()и, следовательно, функциейprint().Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, чтобы убедиться, что она не умалчивает активное исключение.
 
- 
PyObject* 
PyObject_Bytes(PyObject *o)¶ - Return value: New reference.
Вычислить байтовое представление o объекта.
NULLвозвращается при сбое, а объект bytes - при успешном. Python эквивалент выражениюbytes(o), если o не является целым числом. В отличие отbytes(o), TypeError возникает, когда o является целым числом вместо инициализированного нулем байтового объекта. 
- 
int 
PyObject_IsSubclass(PyObject *derived, PyObject *cls)¶ Возвращает
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)¶ Возвращает
1, если inst является сущностью класса cls или подклассом cls, или0, если нет. При ошибке, возвращает-1и устанавливает исключение.Если cls кортеж, проверка будет выполняться по каждой записи в cls. Результат будет
1, когда хотя бы одна из проверок возвращает1, иначе он будет0.Если cls имеет метод
__instancecheck__(), он вызывается для определения статуса подкласса, как описано в PEP 3119. В противном случае inst является сущностью cls, если его класс является подклассом cls.Сущность inst может переопределять то, что считается его классом, имея
__class__атрибут.Объект, cls может переопределить, если он считается классом и каковы его базовые классы, имея
__bases__атрибут (который должен быть кортежем базовых классов).
- 
int 
PyCallable_Check(PyObject *o)¶ Определение, является ли o вызываемым объектом. Возвращает
1, является ли объект вызываемым и0в противном случае. Эта функция всегда выполняется успешно.
- 
PyObject* 
PyObject_Call(PyObject *callable, PyObject *args, PyObject *kwargs)¶ - Return value: New reference.
Вызвать вызываемый объект Python callable с аргументами, заданными args кортежем, и именованными аргументами, заданными kwargs словаре.
args не должны быть
NULL, используйте пустой кортеж, если аргументы не нужны. Если именованные аргументы не требуются, kwargs может бытьNULL.Возвращает результат вызова при успехе, или создать исключение и вернуть
NULLпри сбое.Это эквивалент Python выражения:
callable(*args, **kwargs). 
- 
PyObject* 
PyObject_CallObject(PyObject *callable, PyObject *args)¶ - Return value: New reference.
Вызвать вызываемый объект Python callable с аргументами, заданными args кортежем. Если аргументы не нужны, то args может быть
NULL.Возвращает результат вызова при успехе, или создать исключение и возвращает
NULLпри сбое.Это эквивалент Python выражения:
callable(*args). 
- 
PyObject* 
PyObject_CallFunction(PyObject *callable, const char *format, ...)¶ - Return value: New reference.
Вызвать вызываемый объект Python callable с переменным числом аргументов C. Аргументы C описываются с использованием
Py_BuildValue()стиля формата строки. Формат может бытьNULL, что указывает на отсутствие аргументов.Возвращает результат вызова при успехе, или создать исключение и возвращает
NULLпри сбое.Это эквивалент Python выражения:
callable(*args).Обратите внимание, что если вы передаете только
PyObject *аргументы,PyObject_CallFunctionObjArgs()является более быстрой альтернативой.Изменено в версии 3.4: Тип format был изменен с
char *. 
- 
PyObject* 
PyObject_CallMethod(PyObject *obj, const char *name, const char *format, ...)¶ - Return value: New reference.
Вызвать метод с именем name объекта obj с переменным числом аргументов C. Аргументы C описываются
Py_BuildValue()форматной строкой, которая должна создавать кортеж.Формат может быть
NULL, что указывает на отсутствие аргументов.Возвращает результат вызова при успехе, или создать исключение и возвращение
NULLпри сбое.Это Python эквивалент выражения:
obj.name(arg1, arg2, ...).Обратите внимание, что если вы передаете только
PyObject *аргументы,PyObject_CallMethodObjArgs()является более быстрой альтернативой.Изменено в версии 3.4: Типы name и format были изменены с
char *. 
- 
PyObject* 
PyObject_CallMethodObjArgs(PyObject *obj, PyObject *name, ...)¶ - Return value: New reference.
Вызвать вызываемый объект Python callable с переменным числом аргументов
PyObject*. Аргументы приводятся как переменное число параметров, за которыми следуетNULL.Возвращает результат вызова при успехе, или создать исключение и возвращает
NULLпри сбое.Это Python эквивалент выражения:
callable(arg1, arg2, ...). 
- 
PyObject* 
PyObject_CallMethodObjArgs(PyObject *obj, PyObject *name, ..., NULL) Вызывает метод объекта Python obj, где имя метода задается как объект Python строки в name. Вызывается с переменным числом
PyObject*аргументов. Аргументы приводятся как переменное число параметров, за которыми следуетNULL.Возвращает результат вызова при успехе, или создать исключение и вернуть
NULLпри сбое.
- 
PyObject* 
_PyObject_Vectorcall(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwnames)¶ Вызвать вызываемый объект Python callable, используя
vectorcallесли возможно.args - C массив с позиционными аргументами.
nargsf - количество позиционных аргументов плюс дополнительно флаг
PY_VECTORCALL_ARGUMENTS_OFFSET(см. ниже). Чтобы получить фактическое количество аргументов, используйтеPyVectorcall_NARGS(nargsf).kwnames может иметь значение
NULL(нет ключевых аргументоы) или кортеж ключевых имен. В последнем случае значения ключевых аргументов сохраняются в args после позиционных аргументов. Количество ключевых аргументов не влияет на nargsf.kwnames должен содержать только объекты типа
str(не подкласс), и все ключи должны быть уникальными.Возвращает результат вызова при успехе, или создать исключение и вернуть
NULLпри сбое.Используется протокол vectorcall, если вызываемый поддерживает его; в противном случае аргументы преобразуются для использования
tp_call.Примечание
Эта функция является временной и, как ожидается, станет открытой в Python 3.9, с другим названием и, возможно, измененной семантикой. При использовании этой функции запланируйте обновление кода для Python 3.9.
Добавлено в версии 3.8.
- 
PY_VECTORCALL_ARGUMENTS_OFFSET¶ Если установлено значение в аргументе vectorcall nargsf, вызываемый может временно изменить
args[-1]. Другими словами, args указывает на аргумент 1 (а не 0) в аллоцированном векторе. Вызываемый должен восстановить значениеargs[-1]перед возвратом.Всякий раз, когда они могут сделать это дешево (без дополнительной аллокации), вызывающим рекомендуется использовать
PY_VECTORCALL_ARGUMENTS_OFFSET. Это позволит вызываемым объектам, таким как связанные методы, делать свои последующие вызовы (которые включают добавочный аргумент self) дешевыми.Добавлено в версии 3.8.
- 
Py_ssize_t 
PyVectorcall_NARGS(size_t nargsf)¶ Предоставленный vectorcall nargsf аргумент, возвращаемое фактическое число аргументов. В настоящее время эквивалентно
nargsf & ~PY_VECTORCALL_ARGUMENTS_OFFSET.Добавлено в версии 3.8.
- 
PyObject* 
_PyObject_FastCallDict(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwdict)¶ То же, что и
_PyObject_Vectorcall(), за исключением того, что ключевые аргументы передаются как словарь в kwdict. Это может бытьNULL, если нет ключевых аргументов.Для вызываемых поддержка
vectorcallаргументов преобразуются в vectorcall. Поэтому эта функция добавляет некоторые накладные расходы по сравнению с_PyObject_Vectorcall(). Следует используется только в том случае, если вызывающий уже содержит словарь, готовый к использованию.Примечание
Эта функция является временной и, как ожидается, станет открытой в Python 3.9, с другим названием и, возможно, измененной семантикой. При использовании этой функции запланируйте обновление кода для Python 3.9.
Добавлено в версии 3.8.
- 
Py_hash_t 
PyObject_Hash(PyObject *o)¶ Вычисление и возвращение хэш- значение o объекта. При отказе возвращает
-1. Это эквивалент Python выражениюhash(o).Изменено в версии 3.2: Возвращаемый тип теперь Py_hash_t. Это целое число со знаком того же размера, что и Py_ssize_t.
- 
Py_hash_t 
PyObject_HashNotImplemented(PyObject *o)¶ Установить
TypeErrorуказывая, чтоtype(o)не является хэшируемым и возвращает-1. Эта функция получает специальную обработку при хранении в слотеtp_hash, позволяя типу явно указывать интерпретатору, что он не хэшируемый.
- 
int 
PyObject_IsTrue(PyObject *o)¶ Возвращает
1, если o объекта считается истинным, и0в противном случае. Python эквивалент выраженияnot not o. При отказе возвращает-1.
- 
int 
PyObject_Not(PyObject *o)¶ Возвращает
0, если o объекта считается истинным, и1в противном случае. Python эквивалент выраженияnot o. При отказе возвращает-1.
- 
PyObject* 
PyObject_Type(PyObject *o)¶ - Return value: New reference.
Если o равно не-
NULL, возвращает объект типа, соответствующий типу объекта o. При отказе поднимаетSystemErrorи возвращаетNULL. Python эквивалент выраженияtype(o). Эта функция увеличивает количество ссылок на возвращаемое значение. Нет причин использовать эту функцию вместо общего выраженияo->ob_type, которое возвращает указатель типаPyTypeObject*, за исключением тех случаев, когда требуется увеличение числа ссылок. 
- 
int 
PyObject_TypeCheck(PyObject *o, PyTypeObject *type)¶ Возвращает true, если o объект имеет тип type или подтип type. Оба параметра должны быть не-
NULL.
- 
Py_ssize_t 
PyObject_Size(PyObject *o)¶ - 
Py_ssize_t 
PyObject_Length(PyObject *o)¶ Возвращает длину объекта o. Если объект o предоставляет протокол последовательности и отображения, будет возвращена длина последовательности. При ошибке возвращается
-1. Python эквивалент выражениюlen(o).
- 
Py_ssize_t 
PyObject_LengthHint(PyObject *o, Py_ssize_t default)¶ Возвращает расчетную длину o объекта. Сначала производится попытка возвращения его фактической длины, затем оценку с помощью
__length_hint__()и, наконец, возвращает значение по умолчанию. При ошибке возвращает-1. Python эквивалент выражениюoperator.length_hint(o, default).Добавлено в версии 3.4.
- 
PyObject* 
PyObject_GetItem(PyObject *o, PyObject *key)¶ - Return value: New reference.
Возвращает элемент o, соответствующий объекту key или
NULLпри ошибке. Это Python эквивалент выраженияo[key]. 
- 
int 
PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)¶ Сопоставить объекта key с значением v. Создать исключение и вернуть
-1при сбое; возвращает0при успехе. Это Python эквивалент инструкцииo[key] = v. Эта функция не крадет ссылку на v.
- 
int 
PyObject_DelItem(PyObject *o, PyObject *key)¶ Удалить сопоставление для объекта key из o объекта. Возвращает
-1об отказе. Python эквивалент инструкцияdel o[key].
- 
PyObject* 
PyObject_Dir(PyObject *o)¶ - Return value: New reference.
Python эквивалент выражению
dir(o), возвращающий (возможно, пустой) список строк, соответствующих аргументу объекта, илиNULL, если произошла ошибка. Если аргументNULL, то это похоже на Pythondir(), возвращающий имена текущих локальных; в этом случае, если ни один фрейм выполнения не активен, то возвращаетсяNULL, ноPyErr_Occurred()вернет false. 
