Протокол объекта¶
-
PyObject *
Py_NotImplemented
¶ Синглтон
NotImplemented
, используемый для сигнализации о том, что операция не реализована для данной комбинации типов.
-
Py_RETURN_NOTIMPLEMENTED
¶ Правильно обрабатывать возврат
Py_NotImplemented
из функции языка Си (то есть увеличивать счетчик ссылок 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)¶ - Part of the Stable 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 Stable ABI.
Возвращает
1
, если o имеет атрибут attr_name, и0
в противном случае. Это эквивалентно выражению Pythonhasattr(o, attr_name)
. Эта функция всегда успешна.Обратите внимание, что исключения, возникающие при вызове методов
__getattr__()
и__getattribute__()
и создании временного строкового объекта, будут подавлены. Для получения сообщений об ошибках используйтеPyObject_GetAttrString()
вместо этого.
-
PyObject *
PyObject_GetAttr
(PyObject *o, PyObject *attr_name)¶ - Return value: New reference. Part of the Stable ABI.
Извлечь атрибут с именем attr_name из объекта o. Возвращает значение атрибута в случае успеха или
NULL
в случае неудачи. Это эквивалентно выражению Pythono.attr_name
.
-
PyObject *
PyObject_GetAttrString
(PyObject *o, const char *attr_name)¶ - Return value: New reference. Part of the Stable ABI.
Извлечь атрибут с именем attr_name из объекта o. Возвращает значение атрибута в случае успеха или
NULL
в случае неудачи. Это эквивалентно выражению Pythono.attr_name
.
-
PyObject *
PyObject_GenericGetAttr
(PyObject *o, PyObject *name)¶ - Return value: New reference. Part of the Stable ABI.
Общая функция получения атрибутов, предназначенная для размещения в слоте
tp_getattro
объекта типа. Она ищет дескриптор в словаре классов в MRO объекта, а также атрибут в__dict__
объекта (если он есть). Как указано в Реализация дескрипторов, дескрипторы данных имеют преимущество перед атрибутами экземпляра, а дескрипторы не данных - нет. В противном случае возникает ошибкаAttributeError
.
-
int
PyObject_SetAttr
(PyObject *o, PyObject *attr_name, PyObject *v)¶ - Part of the Stable 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 Stable ABI.
Установить значение атрибута с именем attr_name для объекта o в значение v. Вызвать исключение и вернуть
-1
при неудаче; вернуть0
при успехе. Это эквивалент оператора Pythono.attr_name = v
.Если v равно
NULL
, атрибут удаляется, но эта функция устарела в пользу использованияPyObject_DelAttrString()
.
-
int
PyObject_GenericSetAttr
(PyObject *o, PyObject *name, PyObject *value)¶ - Part of the Stable 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)¶ Удалить атрибут с именем attr_name, для объекта o. При неудаче возвращается
-1
. Это эквивалент оператора Pythondel o.attr_name
.
-
PyObject *
PyObject_GenericGetDict
(PyObject *o, void *context)¶ - Return value: New reference. Part of the Stable ABI since version 3.10.
Общая реализация для геттера дескриптора
__dict__
. При необходимости создает словарь.Добавлено в версии 3.3.
-
int
PyObject_GenericSetDict
(PyObject *o, PyObject *value, void *context)¶ - Part of the Stable ABI since version 3.7.
Общая реализация для сеттера дескриптора
__dict__
. Эта реализация не позволяет удалять словарь.Добавлено в версии 3.3.
-
PyObject *
PyObject_RichCompare
(PyObject *o1, PyObject *o2, int opid)¶ - Return value: New reference. Part of the Stable 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 Stable ABI.
Сравнить значения o1 и o2, используя операцию, заданную opid, которая должна быть одной из
Py_LT
,Py_LE
,Py_EQ
,Py_NE
,Py_GT
илиPy_GE
, соответствующих<
,<=
,==
,!=
,>
или>=
соответственно. Возвращает-1
при ошибке,0
если результат ложный,1
иначе. Это эквивалентно выражению Pythono1 op o2
, гдеop
- оператор, соответствующий opid.
Примечание
Если o1 и o2 являются одним и тем же объектом, PyObject_RichCompareBool()
всегда будет возвращать 1
для Py_EQ
и 0
для Py_NE
.
-
PyObject *
PyObject_Repr
(PyObject *o)¶ - Return value: New reference. Part of the Stable ABI.
Вычислить строковое представление объекта o. При успехе возвращает строковое представление, при неудаче -
NULL
. Это эквивалент выражения Pythonrepr(o)
. Вызывается встроенной функциейrepr()
.Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, чтобы гарантировать, что она не отбрасывает активное исключение.
-
PyObject *
PyObject_ASCII
(PyObject *o)¶ - Return value: New reference. Part of the Stable ABI.
Как и
PyObject_Repr()
, вычислите строковое представление объекта o, но экранируйте символы, не относящиеся к ASCII, в строке, возвращаемойPyObject_Repr()
с помощью\x
,\u
или\U
. Это генерирует строку, подобную той, которую возвращаетPyObject_Repr()
в Python 2. Вызывается встроенной функциейascii()
.
-
PyObject *
PyObject_Str
(PyObject *o)¶ - Return value: New reference. Part of the Stable ABI.
Вычислить строковое представление объекта o. При успехе возвращает строковое представление, при неудаче -
NULL
. Это эквивалент выражения Pythonstr(o)
. Вызывается встроенной функциейstr()
и, следовательно, функциейprint()
.Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, чтобы гарантировать, что она не отбрасывает активное исключение.
-
PyObject *
PyObject_Bytes
(PyObject *o)¶ - Return value: New reference. Part of the Stable ABI.
Вычислить байтовое представление объекта o. В случае неудачи возвращается
NULL
, а в случае успеха - байтовый объект. Это эквивалентно выражению Pythonbytes(o)
, когда o не является целым числом. В отличие отbytes(o)
, когда o является целым числом, а не нуль-инициализированным объектом bytes, выдается ошибка типа TypeError.
-
int
PyObject_IsSubclass
(PyObject *derived, PyObject *cls)¶ - Part of the Stable ABI.
Возвращает
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)¶ - Part of the Stable 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 Stable ABI.
Вычислить и вернуть хэш-значение объекта o. В случае неудачи возвращается
-1
. Это эквивалентно выражению Pythonhash(o)
.Изменено в версии 3.2: Типом возврата теперь является Py_hash_t. Это знаковое целое число того же размера, что и
Py_ssize_t
.
-
Py_hash_t
PyObject_HashNotImplemented
(PyObject *o)¶ - Part of the Stable ABI.
Установите
TypeError
, указывающий на то, чтоtype(o)
не является хэшируемым, и верните-1
. Эта функция получает особое обращение, когда хранится в слотеtp_hash
, что позволяет типу явно указать интерпретатору, что он не является хэшируемым.
-
int
PyObject_IsTrue
(PyObject *o)¶ - Part of the Stable ABI.
Возвращает
1
, если объект o считается истинным, и0
в противном случае. Это эквивалентно выражению Pythonnot not o
. В случае неудачи возвращается-1
.
-
int
PyObject_Not
(PyObject *o)¶ - Part of the Stable ABI.
Возвращает
0
, если объект o считается истинным, и1
в противном случае. Это эквивалентно выражению Pythonnot o
. В случае неудачи возвращается-1
.
-
PyObject *
PyObject_Type
(PyObject *o)¶ - Return value: New reference. Part of the Stable ABI.
Если o не``NULL``, возвращает объект типа, соответствующего типу объекта o. В случае неудачи выдает
SystemError
и возвращаетNULL
. Это эквивалентно выражению Pythontype(o)
. Эта функция увеличивает счетчик ссылок возвращаемого значения. На самом деле нет причин использовать эту функцию вместо функцииPy_TYPE()
, которая возвращает указатель типа PyTypeObject*, за исключением случаев, когда необходимо увеличить счетчик ссылок.
-
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 Stable 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)¶ - Return value: New reference. Part of the Stable ABI.
Возвращает элемент o, соответствующий объекту key или
NULL
при неудаче. Это эквивалент выражения Pythono[key]
.
-
int
PyObject_SetItem
(PyObject *o, PyObject *key, PyObject *v)¶ - Part of the Stable ABI.
Сопоставить объект key со значением v. При неудаче вызывает исключение и возвращает
-1
; при успехе возвращает0
. Это эквивалент оператора Pythono[key] = v
. Эта функция не крадет ссылку на v.
-
int
PyObject_DelItem
(PyObject *o, PyObject *key)¶ - Part of the Stable ABI.
Удалить отображение для объекта key из объекта o. При неудаче возвращается
-1
. Это эквивалентно оператору Pythondel o[key]
.
-
PyObject *
PyObject_Dir
(PyObject *o)¶ - Return value: New reference. Part of the Stable ABI.
Это эквивалентно выражению Python
dir(o)
, возвращающему (возможно, пустой) список строк, соответствующих аргументу объекта, илиNULL
, если произошла ошибка. Если аргументом являетсяNULL
, это эквивалентно выражению Pythondir()
, возвращающему имена текущих локалей; в этом случае, если ни один кадр выполнения не активен, возвращаетсяNULL
, ноPyErr_Occurred()
возвращает false.
-
PyObject *
PyObject_GetIter
(PyObject *o)¶ - Return value: New reference. Part of the Stable ABI.
Это эквивалентно выражению Python
iter(o)
. Оно возвращает новый итератор для аргумента объекта или сам объект, если объект уже является итератором. ВызываетTypeError
и возвращаетNULL
, если объект не может быть итератором.
-
PyObject *
PyObject_GetAIter
(PyObject *o)¶ - Return value: New reference. Part of the Stable ABI since version 3.10.
Это эквивалент выражения
aiter(o)
в Python. Принимает объектAsyncIterable
и возвращает для негоAsyncIterator
. Обычно это новый итератор, но если аргументом являетсяAsyncIterator
, то возвращается он сам. ВызываетTypeError
и возвращаетNULL
, если объект не может быть итерирован.Добавлено в версии 3.10.