Объектный протокол¶
-
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.