Spec-Zone.ru › Python 3.9

Протокол объекта

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). Эта функция всегда выполняется успешно.

Обратите внимание, что исключения, возникающие при вызове методов __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)
Значение возврата: Новая ссылка.

Получение атрибута с именем 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__ объекта (если он есть). Как указано в Реализация дескрипторов, дескрипторы данных имеют приоритет перед атрибутами экземпляра, а дескрипторы не данных нет. В противном случае генерируется 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)
Значение возврата: Новая ссылка.

Реализация-по умолчанию для получения __dict__ дескриптора. Создаёт словарь при необходимости.

Новая функция в версии 3.3.

int PyObject_GenericSetDict(PyObject *o, PyObject *value, 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: Теперь функция включает в себя проверочный утверждающий оператор для того, чтобы убедиться, что она не игнорирует активное исключение.

END_OF_DOCUMENT_MARKER
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), исключение TypeError возникает, когда o является целым числом вместо объекта bytes с нулевым значением.

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__ (который должен быть кортежем базовых классов).

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). Эта функция увеличивает счётчик ссылок возвращаемого значения. Нет реальной причины использовать эту функцию вместо функции Py_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 defaultvalue)

Возвращает приблизительную длину объекта o. Сначала пытается вернуть фактическую длину, затем оценку с помощью __length_hint__(), и, наконец, возвращает значение по умолчанию. В случае ошибки возвращает -1. Это эквивалентно выражению Python operator.length_hint(o, defaultvalue).

Добавлена в версии 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 при ошибке; возвращает 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)
Значение возврата: Новая ссылка.

Это эквивалентно выражению Python dir(o), возвращающему (возможно, пустой) список строк, подходящий для аргумента объекта, или NULL при возникновении ошибки. Если аргумент является NULL, это похоже на Python dir(), возвращающее имена текущих локальных переменных; в этом случае, если активная рамка выполнения отсутствует, возвращается NULL , но PyErr_Occurred() вернёт false.

PyObject* PyObject_GetIter(PyObject *o)
Значение возврата: Новая ссылка.

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

© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/c-api/object.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API