Протокол объектов¶Object Protocol
- 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; если она указана, выводится 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_GenericGetDict(PyObject *o, void *context)¶
Обобщённая реализация геттера дескриптора __dict__. При необходимости создаёт словарь.
Новое в версии 3.3.
- int PyObject_GenericSetDict(PyObject *o, void *context)¶
Обобщённая реализация сеттера дескриптора __dict__. Эта реализация не позволяет удалять словарь.
Новое в версии 3.3.
- 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().
Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, помогающее гарантировать, что она не игнорирует активное исключение без уведомления.
- 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().
Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, помогающее гарантировать, что она не игнорирует активное исключение без уведомления.
- PyObject* PyObject_Bytes(PyObject *o)¶
Вычисляет байтовое представление объекта o. NULL возвращается при ошибке, а в случае успеха – объект bytes. Это эквивалент выражения Python bytes(o), когда o не является целым числом. В отличие от bytes(o), при передаче целого числа o возбуждается TypeError, а не возвращается байтовый объект, заполненный нулями.
- 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_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, const char *format, ...)¶
- Возвращаемое значение: новая ссылка.
Вызывает вызываемый объект Python callable с переменным числом аргументов C. Аргументы C описываются строкой форматирования в стиле Py_BuildValue(). Формат может быть NULL, что означает отсутствие аргументов. Возвращает результат вызова в случае успеха или NULL при ошибке. Это эквивалент выражения Python callable(*args). Обратите внимание: если передаются только аргументы типа PyObject *, то более быстрой альтернативой будет PyObject_CallFunctionObjArgs().
Изменено в версии 3.4: Тип format изменён с char *.
- PyObject* PyObject_CallMethod(PyObject *o, const char *method, const char *format, ...)¶
- Возвращаемое значение: новая ссылка.
Вызывает метод с именем method объекта o с переменным числом аргументов C. Аргументы C описываются строкой форматирования в стиле Py_BuildValue(), которая должна создавать кортеж. Формат может быть NULL, что означает отсутствие аргументов. Возвращает результат вызова в случае успеха или NULL при ошибке. Это эквивалент выражения Python o.method(args). Обратите внимание: если передаются только аргументы типа PyObject *, то более быстрой альтернативой будет PyObject_CallMethodObjArgs().
Изменено в версии 3.4: Типы method и format изменены с char *.
- 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).
- 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)¶
- Возвращаемое значение: новая ссылка.
Возвращает элемент 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() вернёт ложь.