Протокол объектов¶Object Protocol
- 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)¶
Возвращает 1, если o имеет атрибут attr_name, и 0 в противном случае. Это эквивалентно выражению Python hasattr(o, attr_name). Эта функция всегда завершается успешно.
- int PyObject_HasAttrString(PyObject *o, const char *attr_name)¶
Возвращает 1, если o имеет атрибут attr_name, и 0 в противном случае. Это эквивалентно выражению Python hasattr(o, attr_name). Эта функция всегда завершается успешно.
- PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name)¶
- Возвращаемое значение: новая ссылка.
Извлекает атрибут с именем attr_name из объекта o. Возвращает значение атрибута при успехе или NULL при неудаче. Это эквивалент выражения Python o.attr_name.
- PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name)¶
- Возвращаемое значение: новая ссылка.
Извлекает атрибут с именем attr_name из объекта o. Возвращает значение атрибута при успехе или NULL при неудаче. Это эквивалент выражения Python o.attr_name.
- PyObject* PyObject_GenericGetAttr(PyObject *o, PyObject *name)¶
Обобщённая функция получения атрибута, предназначенная для размещения в слот tp_getattro объекта типа. Она ищет дескриптор в словаре классов в MRO объекта, а также атрибут в __dict__ объекта (если он присутствует). Как описано в Implementing Descriptors, дескрипторы данных имеют приоритет над атрибутами экземпляра, а дескрипторы без данных – нет. В противном случае возбуждается AttributeError.
- int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)¶
Устанавливает значение атрибута с именем attr_name для объекта o равным v. Возвращает -1 при неудаче. Это эквивалент оператора Python o.attr_name = v.
- int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)¶
Устанавливает значение атрибута с именем attr_name для объекта o равным v. Возвращает -1 при неудаче. Это эквивалент оператора Python o.attr_name = v.
- int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)¶
Обобщённая функция установки атрибута, предназначенная для размещения в слот tp_setattro объекта типа. Она ищет дескриптор данных в словаре классов в MRO объекта, и если найден, то имеет приоритет над установкой атрибута в словаре экземпляра. В противном случае, атрибут устанавливается в __dict__ объекта (если он присутствует). Иначе возбуждается 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_RichCompare(PyObject *o1, PyObject *o2, int opid)¶
- Возвращаемое значение: новая ссылка.
Сравнивает значения 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 если результат ложный, 1 в противном случае. Это эквивалент выражения Python o1 op o2, где op – оператор, соответствующий opid.
Примечание
Если o1 и o2 – один и тот же объект, PyObject_RichCompareBool() всегда вернёт 1 для Py_EQ и 0 для Py_NE.
- PyObject* PyObject_Repr(PyObject *o)¶
- Возвращаемое значение: новая ссылка.
Вычисляет строковое представление объекта o. Возвращает строковое представление в случае успеха или NULL при ошибке. Это эквивалент выражения Python repr(o). Вызывается встроенной функцией repr().
- PyObject* PyObject_ASCII(PyObject *o)¶
Как и PyObject_Repr(), вычисляет строковое представление объекта o, но экранирует не-ASCII символы в строке, возвращаемой PyObject_Repr(), используя управляющие последовательности \x, \u или \U. Создаёт строку, похожую на ту, что возвращала PyObject_Repr() в Python 2. Вызывается встроенной функцией ascii().
- PyObject* PyObject_Str(PyObject *o)¶
- Возвращаемое значение: новая ссылка.
Вычисляет строковое представление объекта o. Возвращает строковое представление в случае успеха или NULL при ошибке. Это эквивалент выражения Python str(o). Вызывается встроенной функцией str() и, следовательно, функцией print().
- PyObject* PyObject_Bytes(PyObject *o)¶
Вычисляет байтовое представление объекта o. NULL возвращается при ошибке, а в случае успеха – объект bytes. Это эквивалент выражения Python bytes(o), когда o не является целым числом. В отличие от bytes(o), при передаче целого числа o возбуждается TypeError, а не возвращается байтовый объект, заполненный нулями.
- int PyObject_IsInstance(PyObject *inst, PyObject *cls)¶
Возвращает 1, если inst является экземпляром класса cls или подкласса cls, и 0 в противном случае. В случае ошибки возвращает -1 и устанавливает исключение. Если cls является объектом типа, а не объектом класса, PyObject_IsInstance() возвращает 1, если inst имеет тип cls. Если cls – кортеж, проверка будет выполнена по каждому элементу в cls. Результат будет 1, когда хотя бы одна из проверок вернёт 1, иначе будет 0. Если inst не является экземпляром класса, а cls – ни объектом типа, ни объектом класса, ни кортежем, inst должен иметь атрибут __class__ – отношение класса значения этого атрибута к cls будет использовано для определения результата этой функции.
Определение подкласса выполняется достаточно прямолинейно, но содержит тонкость, о которой разработчикам расширений системы классов стоит знать . Если A и B являются объектами классов, B является подклассом A, если он наследует от A прямо или косвенно. Если хотя бы один из них не является объектом класса, используется более общий механизм для определения отношения классов между двумя объектами. При проверке, является ли B подклассом A, если A равен B, PyObject_IsSubclass() возвращает true. Если A и B – разные объекты, атрибут B __bases__ ищется в глубину на наличие A – наличие атрибута __bases__ считается достаточным для такого определения.
- int PyObject_IsSubclass(PyObject *derived, PyObject *cls)¶
Возвращает 1, если класс derived идентичен классу cls или наследуется от него, иначе возвращает 0. В случае ошибки возвращает -1. Если cls является кортежем, проверка будет выполнена для каждого элемента cls. Результат будет 1, когда хотя бы одна из проверок возвращает 1, иначе 0. Если derived или cls не являются реальными объектами классов (или кортежем), эта функция использует описанный выше общий алгоритм.
- int PyCallable_Check(PyObject *o)¶
Определяет, является ли объект o вызываемым. Возвращает 1, если объект вызываем, и 0 в противном случае. Эта функция всегда завершается успешно.
- PyObject* PyObject_Call(PyObject *callable_object, PyObject *args, PyObject *kw)¶
- Возвращаемое значение: новая ссылка.
Вызывает вызываемый объект Python callable_object с аргументами, заданными кортежем args, и именованными аргументами, заданными словарём kw. Если именованные аргументы не нужны, kw может быть NULL. args не должен быть NULL; если аргументы не нужны, используйте пустой кортеж. Возвращает результат вызова в случае успеха или NULL при ошибке. Это эквивалент выражения Python callable_object(*args, **kw).
- PyObject* PyObject_CallObject(PyObject *callable_object, PyObject *args)¶
- Возвращаемое значение: новая ссылка.
Вызывает вызываемый объект Python callable_object с аргументами, заданными кортежем args. Если аргументы не нужны, то args может быть NULL. Возвращает результат вызова в случае успеха или NULL при ошибке. Это эквивалент выражения Python callable_object(*args).
- PyObject* PyObject_CallFunction(PyObject *callable, char *format, ...)¶
- Возвращаемое значение: новая ссылка.
Вызывает вызываемый объект Python callable с переменным числом аргументов C. Аргументы C описываются строкой форматирования в стиле Py_BuildValue(). Формат может быть NULL, что означает отсутствие аргументов. Возвращает результат вызова в случае успеха или NULL при ошибке. Это эквивалент выражения Python callable(*args). Обратите внимание: если передаются только аргументы типа PyObject *, то более быстрой альтернативой будет PyObject_CallFunctionObjArgs().
- PyObject* PyObject_CallMethod(PyObject *o, char *method, char *format, ...)¶
- Возвращаемое значение: новая ссылка.
Вызывает метод с именем method объекта o с переменным числом аргументов C. Аргументы C описываются строкой форматирования в стиле Py_BuildValue(), которая должна создавать кортеж. Формат может быть NULL, что означает отсутствие аргументов. Возвращает результат вызова в случае успеха или NULL при ошибке. Это эквивалент выражения Python o.method(args). Обратите внимание: если передаются только аргументы типа PyObject *, то более быстрой альтернативой будет PyObject_CallMethodObjArgs().
- PyObject* PyObject_CallFunctionObjArgs(PyObject *callable, ..., NULL)¶
- Возвращаемое значение: новая ссылка.
Вызывает вызываемый объект Python callable с переменным числом аргументов типа PyObject*. Аргументы передаются как переменное число параметров, за которыми следует NULL. Возвращает результат вызова в случае успеха или NULL при ошибке.
- PyObject* PyObject_CallMethodObjArgs(PyObject *o, PyObject *name, ..., NULL)¶
- Возвращаемое значение: новая ссылка.
Вызывает метод объекта o, где имя метода передаётся в виде строкового объекта Python в name. Вызывается с переменным числом аргументов PyObject*. Аргументы передаются как переменное число параметров, за которыми следует NULL. Возвращает результат вызова в случае успеха или NULL при ошибке.
- 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)¶
- Возвращаемое значение: новая ссылка.
Если o не равно NULL, возвращает объект типа, соответствующий типу объекта o. В случае ошибки возбуждает SystemError и возвращает NULL. Это эквивалент выражения Python type(o). Эта функция увеличивает счётчик ссылок возвращаемого значения. Нет особой причины использовать эту функцию вместо обычного выражения o->ob_type, которое возвращает указатель типа PyTypeObject*, за исключением случаев, когда требуется увеличенный счётчик ссылок.
- int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)¶
Возвращает истину, если объект o имеет тип type или является подтипом type. Оба параметра не должны быть NULL.
- Py_ssize_t PyObject_Length(PyObject *o)¶
- Py_ssize_t PyObject_Size(PyObject *o)¶
Возвращает длину объекта o. Если объект o предоставляет протоколы последовательности и отображения, возвращается длина последовательности. При ошибке возвращается -1. Это эквивалент выражения Python len(o).
- PyObject* PyObject_GetItem(PyObject *o, PyObject *key)¶
- Возвращаемое значение: новая ссылка.
Возвращает элемент o, соответствующий объекту key, или NULL при ошибке. Это эквивалентно выражению Python o[key].
- int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)¶
Сопоставляет объект key со значением v. При ошибке возвращает -1. Это эквивалент инструкции Python o[key] = v.
- int PyObject_DelItem(PyObject *o, PyObject *key)¶
Удаляет отображение для key из o. При ошибке возвращает -1. Это эквивалент инструкции Python del o[key].
- PyObject* PyObject_Dir(PyObject *o)¶
- Возвращаемое значение: новая ссылка.
Это эквивалент выражения Python dir(o), возвращает (возможно, пустой) список строк, соответствующий аргументу-объекту, или NULL в случае ошибки. Если аргумент равен NULL, это аналогично Python dir(), возвращающему имена текущих локальных переменных; в этом случае, если активного кадра выполнения нет, возвращается NULL, но PyErr_Occurred() вернёт ложь.