Протокол объектов¶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.
- int PyObject_Cmp(PyObject *o1, PyObject *o2, int *result)¶
Сравнивает значения o1 и o2 с помощью процедуры, предоставленной o1, если таковая существует, иначе – процедурой от o2. Результат сравнения сохраняется в result. Возвращает -1 в случае ошибки. Это эквивалент оператора Python result = cmp(o1, o2).
- int PyObject_Compare(PyObject *o1, PyObject *o2)¶
Сравнивает значения o1 и o2 с помощью процедуры, предоставленной o1, если таковая существует, иначе – процедурой от o2. В случае успеха возвращает результат сравнения. При ошибке возвращаемое значение не определено; для обнаружения ошибки используйте PyErr_Occurred(). Это эквивалент выражения Python cmp(o1, o2).
- PyObject* PyObject_Repr(PyObject *o)¶
- Возвращаемое значение: новая ссылка.
Вычисляет строковое представление объекта o. Возвращает строковое представление в случае успеха, NULL при ошибке. Это эквивалент выражения Python repr(o). Вызывается встроенной функцией repr() и обратными кавычками.
- PyObject* PyObject_Str(PyObject *o)¶
- Возвращаемое значение: новая ссылка.
Вычисляет строковое представление объекта o. Возвращает строковое представление в случае успеха, NULL при ошибке. Это эквивалент выражения Python str(o). Вызывается встроенной функцией str() и оператором print.
- PyObject* PyObject_Bytes(PyObject *o)¶
Вычисляет байтовое представление объекта o. В версии 2.x это просто псевдоним для PyObject_Str().
- PyObject* PyObject_Unicode(PyObject *o)¶
- Возвращаемое значение: новая ссылка.
Вычисляет строковое представление в Unicode объекта o. Возвращает строковое представление Unicode в случае успеха, NULL при ошибке. Это эквивалент выражения Python unicode(o). Вызывается встроенной функцией unicode().
- 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 будет использовано для определения результата этой функции.
Новое в версии 2.1.
Изменено в версии 2.2: Добавлена поддержка кортежа в качестве второго аргумента.
Определение подкласса выполняется достаточно прямолинейно, но содержит тонкость, о которой разработчикам расширений системы классов стоит знать . Если 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 не являются реальными объектами классов (или кортежем), эта функция использует описанный выше общий алгоритм.
Новое в версии 2.1.
Изменено в версии 2.3: Более старые версии Python не поддерживали кортеж в качестве второго аргумента.
- 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 apply(callable_object, args, kw) или callable_object(*args, **kw).
Новое в версии 2.2.
- PyObject* PyObject_CallObject(PyObject *callable_object, PyObject *args)¶
- Возвращаемое значение: новая ссылка.
Вызывает вызываемый объект Python callable_object с аргументами, заданными кортежем args. Если аргументы не нужны, args может быть NULL. Возвращает результат вызова в случае успеха или NULL при ошибке. Это эквивалент выражения Python apply(callable_object, args) или callable_object(*args).
- PyObject* PyObject_CallFunction(PyObject *callable, char *format, ...)¶
- Возвращаемое значение: новая ссылка.
Вызывает вызываемый объект Python callable с переменным числом аргументов C. Аргументы C описываются строкой формата в стиле Py_BuildValue(). Формат может быть NULL, что означает отсутствие аргументов. Возвращает результат вызова в случае успеха или NULL при ошибке. Это эквивалент выражения Python apply(callable, args) или 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 при ошибке.
Новое в версии 2.2.
- PyObject* PyObject_CallMethodObjArgs(PyObject *o, PyObject *name, ..., NULL)¶
- Возвращаемое значение: новая ссылка.
Вызывает метод объекта o, где имя метода передаётся в виде строкового объекта Python в name. Вызывается с переменным числом аргументов PyObject*. Аргументы передаются как переменное число параметров, за которыми следует NULL. Возвращает результат вызова в случае успеха или NULL при ошибке.
Новое в версии 2.2.
- long PyObject_Hash(PyObject *o)¶
Вычисляет и возвращает хеш-значение объекта o. В случае ошибки возвращает -1. Это эквивалент выражения Python hash(o).
- long PyObject_HashNotImplemented(PyObject *o)¶
Устанавливает TypeError, сообщающий, что type(o) не хешируется, и возвращает -1. Эта функция получает особую обработку, если помещена в слот tp_hash, позволяя типу явно указать интерпретатору, что он не хешируется.
Новое в версии 2.6.
- 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.
Новое в версии 2.2.
- Py_ssize_t PyObject_Length(PyObject *o)¶
- Py_ssize_t PyObject_Size(PyObject *o)¶
Возвращает длину объекта o. Если объект o предоставляет протоколы последовательности и отображения, возвращается длина последовательности. При ошибке возвращается -1. Это эквивалент выражения Python len(o).
Изменено в версии 2.5: Ранее эти функции возвращали значение типа int. Это может потребовать изменений в вашем коде для корректной поддержки 64-битных систем.
- 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].
- int PyObject_AsFileDescriptor(PyObject *o)¶
- Извлекает файловый дескриптор из объекта Python. Если объект является целым числом (int) или длинным целым (long), возвращается его значение. В противном случае вызывается метод объекта fileno(), если он существует; метод должен возвращать целое или длинное целое число, которое и будет значением файлового дескриптора. Возвращает -1 при ошибке.
- PyObject* PyObject_Dir(PyObject *o)¶
- Возвращаемое значение: новая ссылка.
Это эквивалент выражения Python dir(o), возвращает (возможно, пустой) список строк, соответствующий аргументу-объекту, или NULL в случае ошибки. Если аргумент равен NULL, это аналогично Python dir(), возвращающему имена текущих локальных переменных; в этом случае, если активного кадра выполнения нет, возвращается NULL, но PyErr_Occurred() вернёт ложь.