Объектный протокол¶
-
PyObject *Py_NotImplemented¶
Синглтон
NotImplemented, используемый для обозначения того, что операция не реализована для данной комбинации типов.
-
Py_RETURN_NOTIMPLEMENTED¶
Правильно обработайте возврат
Py_NotImplementedиз функции C (то есть создайте новый strong reference, который не реализован, и верните его).
-
Py_PRINT_RAW¶
Флаг, который будет использоваться с несколькими функциями, выводящими объект на печать (например
PyObject_Print()иPyFile_WriteObject()). Если бы эта функция была передана, она использовала быstr()объекта вместоrepr().
-
int PyObject_Print(PyObject *o, FILE *fp, int flags)¶
Напечатайте объект o в файле fp. При ошибке возвращает
-1. Аргумент flags используется для включения определенных параметров печати. В настоящее время поддерживается только один вариант : c:macro:Py_PRINT_RAW; если он задан, то вместоrepr()записываетсяstr()объекта.
-
int PyObject_HasAttr(PyObject *o, PyObject *attr_name)¶
- Part of the Стабильный ABI.
Возвращает
1, если o имеет атрибут attr_name, и0в противном случае. Это эквивалентно выражению Pythonhasattr(o, attr_name). Эта функция всегда выполняется успешно.Примечание
Исключения, возникающие при вызове методов
__getattr__()и__getattribute__(), автоматически игнорируются. Для правильной обработки ошибок используйте вместо этогоPyObject_GetAttr().
-
int PyObject_HasAttrString(PyObject *o, const char *attr_name)¶
- Part of the Стабильный ABI.
Это то же самое, что и
PyObject_HasAttr(), но attr_name указывается как строка const char* в кодировке UTF-8 байт, а не как PyObject*.Примечание
Исключения, возникающие при вызове методов
__getattr__()и__getattribute__()или при создании временного объектаstr, автоматически игнорируются. Для правильной обработки ошибок используйте вместо этогоPyObject_GetAttrString().
-
PyObject *PyObject_GetAttr(PyObject *o, PyObject *attr_name)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Извлекает атрибут с именем attr_name из объекта o. Возвращает значение атрибута в случае успеха или
NULLв случае неудачи. Это эквивалент выражения Pythono.attr_name.
-
PyObject *PyObject_GetAttrString(PyObject *o, const char *attr_name)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Это то же самое, что и
PyObject_GetAttr(), но attr_name указывается как строка const char* в кодировке UTF-8 байт, а не как PyObject*.
-
PyObject *PyObject_GenericGetAttr(PyObject *o, PyObject *name)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Универсальная функция получения атрибутов, предназначенная для помещения в слот
tp_getattroобъекта типа. Он ищет дескриптор в словаре классов в MRO объекта, а также атрибут в__dict__объекта (если он присутствует). Как указано в Реализация дескрипторов, дескрипторы данных имеют преимущество перед атрибутами экземпляра, в то время как дескрипторы, не связанные с данными, - нет. В противном случае возникаетAttributeError.
-
int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)¶
- Part of the Стабильный ABI.
Установите значение атрибута с именем attr_name для объекта o равным значению v. Создайте исключение и верните
-1в случае сбоя; верните0в случае успеха. Это эквивалент инструкции Pythono.attr_name = v.Если значение v равно
NULL, атрибут удаляется. Это поведение считается устаревшим в пользу использованияPyObject_DelAttr(), но в настоящее время его удаление не планируется.
-
int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)¶
- Part of the Стабильный ABI.
Это то же самое, что и
PyObject_SetAttr(), но attr_name указывается как строка const char* в кодировке UTF-8 байт, а не как PyObject*.Если v равно
NULL, атрибут удаляется, но эта функция считается устаревшей в пользу использованияPyObject_DelAttrString().
-
int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)¶
- Part of the Стабильный ABI.
Универсальная функция установки и удаления атрибутов, предназначенная для помещения в слот объекта типа
tp_setattro. Он ищет дескриптор данных в словаре классов в MRO объекта и, если он найден, отдает предпочтение установке или удалению атрибута в словаре экземпляра. В противном случае атрибут устанавливается или удаляется в__dict__объекта (если он присутствует). В случае успеха возвращается0, в противном случае генерируетсяAttributeErrorи возвращается-1.
-
int PyObject_DelAttr(PyObject *o, PyObject *attr_name)¶
Удалите атрибут с именем attr_name для объекта o. В случае сбоя возвращает
-1. Это эквивалентно инструкции Pythondel o.attr_name.
-
int PyObject_DelAttrString(PyObject *o, const char *attr_name)¶
Это то же самое, что и
PyObject_DelAttr(), но attr_name указывается как строка const char* в кодировке UTF-8 байт, а не как PyObject*.
-
PyObject *PyObject_GenericGetDict(PyObject *o, void *context)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI since version 3.10.
Универсальная реализация для получения дескриптора
__dict__. При необходимости он создает словарь.Эта функция также может быть вызвана для получения
__dict__объекта o. ПередайтеNULLдля контекста при ее вызове. Поскольку этой функции может потребоваться выделить память для словаря, может оказаться более эффективным вызватьPyObject_GetAttr()при обращении к атрибуту объекта.В случае сбоя возвращает
NULLс установленным исключением.Добавлено в версии 3.3.
-
int PyObject_GenericSetDict(PyObject *o, PyObject *value, void *context)¶
- Part of the Стабильный ABI since version 3.7.
Универсальная реализация для средства настройки дескриптора
__dict__. Эта реализация не позволяет удалять словарь.Добавлено в версии 3.3.
-
PyObject **_PyObject_GetDictPtr(PyObject *obj)¶
Возвращает указатель на
__dict__объекта obj. Если нет__dict__, вернитеNULLбез установки исключения.Этой функции может потребоваться выделить память для словаря, поэтому может оказаться более эффективным вызвать
PyObject_GetAttr()при обращении к атрибуту объекта.
-
PyObject *PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Сравните значения o1 и o2, используя операцию, указанную в opid, которая должна быть одной из следующих
Py_LT,Py_LE,Py_EQ,Py_NE,Py_GTилиPy_GE, соответствующий<,<=,==,!=,>или>=соответственно. Это эквивалент выражения Pythono1 op o2, гдеop- оператор, соответствующий opid. Возвращает значение сравнения в случае успеха илиNULLв случае неудачи.
-
int PyObject_RichCompareBool(PyObject *o1, PyObject *o2, int opid)¶
- Part of the Стабильный ABI.
Сравните значения o1 и o2, используя операцию, указанную в opid, например
PyObject_RichCompare(), но возвращает-1при ошибке,0если результат ложный,1в противном случае.
Примечание
Если o1 и o2 являются одним и тем же объектом, то PyObject_RichCompareBool() всегда будет возвращать 1 для Py_EQ и 0 для Py_NE.
-
PyObject *PyObject_Format(PyObject *obj, PyObject *format_spec)¶
- Part of the Стабильный ABI.
Отформатируйте obj с помощью format_spec. Это эквивалентно выражению Python
format(obj, format_spec).format_spec может быть
NULL. В этом случае вызов эквивалентенformat(obj). В случае успеха возвращает отформатированную строку, в случае неудачи -NULL.
-
PyObject *PyObject_Repr(PyObject *o)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Вычислить строковое представление объекта o. Возвращает строковое представление в случае успеха,
NULLв случае неудачи. Это эквивалент выражения Pythonrepr(o). Вызывается встроенной функциейrepr().Изменено в версии 3.4: Эта функция теперь включает в себя утверждение отладки, которое помогает гарантировать, что она не будет автоматически отбрасывать активное исключение.
-
PyObject *PyObject_ASCII(PyObject *o)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Как
PyObject_Repr(), вычислите строковое представление объекта o, но экранируйте символы, отличные от ASCII, в строке, возвращаемойPyObject_Repr(), с помощью экранирования\x,\uили\U. При этом генерируется строка, аналогичная той, которая возвращается с помощьюPyObject_Repr()в Python 2. Вызывается встроенной функциейascii().
-
PyObject *PyObject_Str(PyObject *o)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Вычислить строковое представление объекта o. Возвращает строковое представление в случае успеха,
NULLв случае неудачи. Это эквивалент выражения Pythonstr(o). Вызывается встроенной функциейstr()и, следовательно, функциейprint().Изменено в версии 3.4: Эта функция теперь включает в себя утверждение отладки, которое помогает гарантировать, что она не будет автоматически отбрасывать активное исключение.
-
PyObject *PyObject_Bytes(PyObject *o)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Вычислите байтовое представление объекта o. В случае сбоя возвращается
NULL, а в случае успеха - байтовый объект. Это эквивалентно выражению Pythonbytes(o), когда o не является целым числом. В отличие отbytes(o), ошибка TypeError возникает, когда o является целым числом, а не объектом, инициализированным нулем в байтах.
-
int PyObject_IsSubclass(PyObject *derived, PyObject *cls)¶
- Part of the Стабильный ABI.
Верните
1, если класс derived идентичен классу cls или является производным от него, в противном случае верните0. В случае ошибки верните-1.Если cls является кортежем, проверка будет производиться по каждой записи в cls. Результатом будет
1, если хотя бы одна из проверок вернет1, в противном случае будет0.Если в cls есть метод
__subclasscheck__(), он будет вызван для определения статуса подкласса, как описано в PEP 3119. В противном случае, производный является подклассом cls, если он является прямым или косвенным подклассом, т.е. содержится вcls.__mro__.Обычно классами считаются только объекты класса, т.е. экземпляры
typeили производного класса. Однако объекты могут переопределять это, имея атрибут__bases__(который должен быть кортежем базовых классов).
-
int PyObject_IsInstance(PyObject *inst, PyObject *cls)¶
- Part of the Стабильный ABI.
Возвращает
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)¶
- Part of the Стабильный ABI.
Вычислите и верните хэш-значение объекта o. В случае сбоя верните
-1. Это эквивалент выражения Pythonhash(o).Изменено в версии 3.2: Возвращаемый тип теперь Py_hash_t. Это целое число со знаком того же размера, что и
Py_ssize_t.
-
Py_hash_t PyObject_HashNotImplemented(PyObject *o)¶
- Part of the Стабильный ABI.
Установите
TypeError, указывающий на то, чтоtype(o)не является hashable, и верните-1. Эта функция получает особую обработку при сохранении в слотеtp_hash, позволяя типу явно указывать интерпретатору, что он не поддается хэшированию.
-
int PyObject_IsTrue(PyObject *o)¶
- Part of the Стабильный ABI.
Возвращает
1, если объект o считается истинным, и0в противном случае. Это эквивалентно выражению Pythonnot not o. В случае сбоя возвращает-1.
-
int PyObject_Not(PyObject *o)¶
- Part of the Стабильный ABI.
Возвращает
0, если объект o считается истинным, и1в противном случае. Это эквивалентно выражению Pythonnot o. В случае сбоя возвращает-1.
-
PyObject *PyObject_Type(PyObject *o)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Когда значение o не равно``NULL``, возвращает тип object, соответствующий типу объекта object o. В случае сбоя возвращает значение
SystemErrorи возвращает значениеNULL. Это эквивалентно выражению Pythontype(o). Эта функция создает новое значение strong reference для возвращаемого значения. На самом деле нет никакой причины использовать эту функцию вместо функцииPy_TYPE(), которая возвращает указатель типа PyTypeObject*, за исключением случаев, когда требуется новый strong reference.
-
int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)¶
Возвращает ненулевое значение, если объект o имеет тип type или подтип type, и
0в противном случае. Оба параметра должны быть не``NULL``.
-
Py_ssize_t PyObject_Size(PyObject *o)¶
-
Py_ssize_t PyObject_Length(PyObject *o)¶
- Part of the Стабильный ABI.
Возвращает длину объекта o. Если объект o предоставляет протоколы последовательности и сопоставления, возвращается длина последовательности. В случае ошибки возвращается значение
-1. Это эквивалентно выражению Pythonlen(o).
-
Py_ssize_t PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue)¶
Возвращает приблизительную длину объекта o. Сначала попробуйте вернуть его фактическую длину, затем оцените с помощью
__length_hint__()и, наконец, верните значение по умолчанию. При ошибке верните-1. Это эквивалентно выражению Pythonoperator.length_hint(o, defaultvalue).Добавлено в версии 3.4.
-
PyObject *PyObject_GetItem(PyObject *o, PyObject *key)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Возвращает элемент o, соответствующий объекту key, или
NULLв случае сбоя. Это эквивалент выражения Pythono[key].
-
int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)¶
- Part of the Стабильный ABI.
Сопоставьте объекту key значение v. Создайте исключение и верните
-1в случае сбоя; верните0в случае успеха. Это эквивалентно инструкции Pythono[key] = v. Эта функция не крадет ссылку на v.
-
int PyObject_DelItem(PyObject *o, PyObject *key)¶
- Part of the Стабильный ABI.
Удалите сопоставление для объекта key из объекта o. Верните
-1в случае сбоя. Это эквивалентно инструкции Pythondel o[key].
-
PyObject *PyObject_Dir(PyObject *o)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Это эквивалентно выражению Python
dir(o), возвращающему (возможно, пустой) список строк, соответствующих аргументу object, илиNULL, если произошла ошибка. Если аргумент равенNULL, то это похоже на Pythondir(), возвращающий имена текущих локальных объектов; в этом случае, если ни один фрейм выполнения не активен, то возвращаетсяNULL, ноPyErr_Occurred()вернет значение false.
-
PyObject *PyObject_GetIter(PyObject *o)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Это эквивалентно выражению Python
iter(o). Оно возвращает новый итератор для аргумента object или сам объект, если объект уже является итератором. ВызываетTypeErrorи возвращаетNULL, если объект не может быть повторен.
-
PyObject *PyObject_GetAIter(PyObject *o)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI since version 3.10.
Это эквивалентно выражению Python
aiter(o). Принимает объектAsyncIterableи возвращает для негоAsyncIterator. Обычно это новый итератор, но если аргументом являетсяAsyncIterator, он возвращает сам себя. ВызываетTypeErrorи возвращаетNULL, если объект не может быть повторен.Добавлено в версии 3.10.