Документация Python неофициальный перевод

Протокол объектов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() вернёт ложь.

PyObject* PyObject_GetIter(PyObject *o)
Возвращаемое значение: новая ссылка.

Это эквивалент выражения Python iter(o). Возвращает новый итератор для аргумента-объекта или сам объект, если он уже является итератором. Возбуждает TypeError и возвращает NULL, если объект не может быть итерирован.