Объектный протокол¶
-
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
; если указано, вместоrepr()
записываетсяstr()
объекта.
-
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)¶ - Return value: New reference.
Извлечение атрибута с именем attr_name из объекта o. Возвращает значение атрибута при успехе или
NULL
при сбое. Это эквивалент Python выраженияo.attr_name
.
-
PyObject*
PyObject_GetAttrString
(PyObject *o, const char *attr_name)¶ - Return value: New reference.
Извлечение атрибута с именем attr_name из объекта o. Возвращает значение атрибута при успехе или
NULL
при сбое. Это эквивалент Python выраженияo.attr_name
.
-
PyObject*
PyObject_GenericGetAttr
(PyObject *o, PyObject *name)¶ - Return value: New reference.
Универсальная функция получения атрибута, предназначенная для ввода в
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)¶ - Return value: New reference.
Общая реализация для геттера
__dict__
дескриптора. При необходимости он создает словарь.Добавлено в версии 3.3.
-
int
PyObject_GenericSetDict
(PyObject *o, PyObject *value, void *context)¶ Общая реализация для сеттера
__dict__
дескриптора. Эта реализация не позволяет удалить словарь.Добавлено в версии 3.3.
-
PyObject*
PyObject_RichCompare
(PyObject *o1, PyObject *o2, int opid)¶ - Return value: New reference.
Сравнить значения 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
если результат имеет значение false,1
в противном случае. Это Python эквивалент выраженияo1 op o2
, гдеop
- оператор, соответствующий opid.
Примечание
Если o1 и o2 являются одним и тем же объектом, PyObject_RichCompareBool()
всегда будет возвращать 1
для Py_EQ
и 0
для
Py_NE
.
-
PyObject*
PyObject_Repr
(PyObject *o)¶ - Return value: New reference.
Вычислить строку представления o объектов. Возвращает строку представление при успехе,
NULL
при неудаче. Это эквивалент выражения Pythonrepr(o)
. Вызывается встроенной функциейrepr()
.Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, чтобы убедиться, что она не отбрасывает активное исключение.
-
PyObject*
PyObject_ASCII
(PyObject *o)¶ - Return value: New reference.
Как
PyObject_Repr()
, вычисляет представление строки объекта o, но экранирование не ASCII символов в строку возвращеннуюPyObject_Repr()
с\x
,\u
или экранированиями\U
. При этом генерируется строка, аналогичный возвращеннойPyObject_Repr()
в Python 2. Вызывается встроенной функциейascii()
.
-
PyObject*
PyObject_Str
(PyObject *o)¶ - Return value: New reference.
Вычислить строковое представление o объектов. Возвращает строковое представление при успехе,
NULL
при неудаче. Это Python эквивалент выраженияstr(o)
. Вызывается встроенной функциейstr()
и, следовательно, функциейprint()
.Изменено в версии 3.4: Эта функция теперь включает отладочное утверждение, чтобы убедиться, что она не умалчивает активное исключение.
-
PyObject*
PyObject_Bytes
(PyObject *o)¶ - Return value: New reference.
Вычислить байтовое представление o объекта.
NULL
возвращается при сбое, а объект bytes - при успешном. Python эквивалент выражениюbytes(o)
, если o не является целым числом. В отличие отbytes(o)
, TypeError возникает, когда o является целым числом вместо инициализированного нулем байтового объекта.
-
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, PyObject *args, PyObject *kwargs)¶ - Return value: New reference.
Вызвать вызываемый объект Python callable с аргументами, заданными args кортежем, и именованными аргументами, заданными kwargs словаре.
args не должны быть
NULL
, используйте пустой кортеж, если аргументы не нужны. Если именованные аргументы не требуются, kwargs может бытьNULL
.Возвращает результат вызова при успехе, или создать исключение и вернуть
NULL
при сбое.Это эквивалент Python выражения:
callable(*args, **kwargs)
.
-
PyObject*
PyObject_CallObject
(PyObject *callable, PyObject *args)¶ - Return value: New reference.
Вызвать вызываемый объект Python callable с аргументами, заданными args кортежем. Если аргументы не нужны, то args может быть
NULL
.Возвращает результат вызова при успехе, или создать исключение и возвращает
NULL
при сбое.Это эквивалент Python выражения:
callable(*args)
.
-
PyObject*
PyObject_CallFunction
(PyObject *callable, const char *format, ...)¶ - Return value: New reference.
Вызвать вызываемый объект Python callable с переменным числом аргументов C. Аргументы C описываются с использованием
Py_BuildValue()
стиля формата строки. Формат может бытьNULL
, что указывает на отсутствие аргументов.Возвращает результат вызова при успехе, или создать исключение и возвращает
NULL
при сбое.Это эквивалент Python выражения:
callable(*args)
.Обратите внимание, что если вы передаете только
PyObject *
аргументы,PyObject_CallFunctionObjArgs()
является более быстрой альтернативой.Изменено в версии 3.4: Тип format был изменен с
char *
.
-
PyObject*
PyObject_CallMethod
(PyObject *obj, const char *name, const char *format, ...)¶ - Return value: New reference.
Вызвать метод с именем name объекта obj с переменным числом аргументов C. Аргументы C описываются
Py_BuildValue()
форматной строкой, которая должна создавать кортеж.Формат может быть
NULL
, что указывает на отсутствие аргументов.Возвращает результат вызова при успехе, или создать исключение и возвращение
NULL
при сбое.Это Python эквивалент выражения:
obj.name(arg1, arg2, ...)
.Обратите внимание, что если вы передаете только
PyObject *
аргументы,PyObject_CallMethodObjArgs()
является более быстрой альтернативой.Изменено в версии 3.4: Типы name и format были изменены с
char *
.
-
PyObject*
PyObject_CallMethodObjArgs
(PyObject *obj, PyObject *name, ...)¶ - Return value: New reference.
Вызвать вызываемый объект Python callable с переменным числом аргументов
PyObject*
. Аргументы приводятся как переменное число параметров, за которыми следуетNULL
.Возвращает результат вызова при успехе, или создать исключение и возвращает
NULL
при сбое.Это Python эквивалент выражения:
callable(arg1, arg2, ...)
.
-
PyObject*
PyObject_CallMethodObjArgs
(PyObject *obj, PyObject *name, ..., NULL) Вызывает метод объекта Python obj, где имя метода задается как объект Python строки в name. Вызывается с переменным числом
PyObject*
аргументов. Аргументы приводятся как переменное число параметров, за которыми следуетNULL
.Возвращает результат вызова при успехе, или создать исключение и вернуть
NULL
при сбое.
-
PyObject*
_PyObject_Vectorcall
(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwnames)¶ Вызвать вызываемый объект Python callable, используя
vectorcall
если возможно.args - C массив с позиционными аргументами.
nargsf - количество позиционных аргументов плюс дополнительно флаг
PY_VECTORCALL_ARGUMENTS_OFFSET
(см. ниже). Чтобы получить фактическое количество аргументов, используйтеPyVectorcall_NARGS(nargsf)
.kwnames может иметь значение
NULL
(нет ключевых аргументоы) или кортеж ключевых имен. В последнем случае значения ключевых аргументов сохраняются в args после позиционных аргументов. Количество ключевых аргументов не влияет на nargsf.kwnames должен содержать только объекты типа
str
(не подкласс), и все ключи должны быть уникальными.Возвращает результат вызова при успехе, или создать исключение и вернуть
NULL
при сбое.Используется протокол vectorcall, если вызываемый поддерживает его; в противном случае аргументы преобразуются для использования
tp_call
.Примечание
Эта функция является временной и, как ожидается, станет открытой в Python 3.9, с другим названием и, возможно, измененной семантикой. При использовании этой функции запланируйте обновление кода для Python 3.9.
Добавлено в версии 3.8.
-
PY_VECTORCALL_ARGUMENTS_OFFSET
¶ Если установлено значение в аргументе vectorcall nargsf, вызываемый может временно изменить
args[-1]
. Другими словами, args указывает на аргумент 1 (а не 0) в аллоцированном векторе. Вызываемый должен восстановить значениеargs[-1]
перед возвратом.Всякий раз, когда они могут сделать это дешево (без дополнительной аллокации), вызывающим рекомендуется использовать
PY_VECTORCALL_ARGUMENTS_OFFSET
. Это позволит вызываемым объектам, таким как связанные методы, делать свои последующие вызовы (которые включают добавочный аргумент self) дешевыми.Добавлено в версии 3.8.
-
Py_ssize_t
PyVectorcall_NARGS
(size_t nargsf)¶ Предоставленный vectorcall nargsf аргумент, возвращаемое фактическое число аргументов. В настоящее время эквивалентно
nargsf & ~PY_VECTORCALL_ARGUMENTS_OFFSET
.Добавлено в версии 3.8.
-
PyObject*
_PyObject_FastCallDict
(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwdict)¶ То же, что и
_PyObject_Vectorcall()
, за исключением того, что ключевые аргументы передаются как словарь в kwdict. Это может бытьNULL
, если нет ключевых аргументов.Для вызываемых поддержка
vectorcall
аргументов преобразуются в vectorcall. Поэтому эта функция добавляет некоторые накладные расходы по сравнению с_PyObject_Vectorcall()
. Следует используется только в том случае, если вызывающий уже содержит словарь, готовый к использованию.Примечание
Эта функция является временной и, как ожидается, станет открытой в Python 3.9, с другим названием и, возможно, измененной семантикой. При использовании этой функции запланируйте обновление кода для Python 3.9.
Добавлено в версии 3.8.
-
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)¶ - Return value: New reference.
Если o равно не-
NULL
, возвращает объект типа, соответствующий типу объекта o. При отказе поднимаетSystemError
и возвращаетNULL
. Python эквивалент выраженияtype(o)
. Эта функция увеличивает количество ссылок на возвращаемое значение. Нет причин использовать эту функцию вместо общего выраженияo->ob_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 default)¶ Возвращает расчетную длину o объекта. Сначала производится попытка возвращения его фактической длины, затем оценку с помощью
__length_hint__()
и, наконец, возвращает значение по умолчанию. При ошибке возвращает-1
. Python эквивалент выражениюoperator.length_hint(o, default)
.Добавлено в версии 3.4.
-
PyObject*
PyObject_GetItem
(PyObject *o, PyObject *key)¶ - Return value: New reference.
Возвращает элемент 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)¶ - Return value: New reference.
Python эквивалент выражению
dir(o)
, возвращающий (возможно, пустой) список строк, соответствующих аргументу объекта, илиNULL
, если произошла ошибка. Если аргументNULL
, то это похоже на Pythondir()
, возвращающий имена текущих локальных; в этом случае, если ни один фрейм выполнения не активен, то возвращаетсяNULL
, ноPyErr_Occurred()
вернет false.