Протокол объектов¶Object Protocol
-
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в противном случае. Это эквивалентно выражению Pythonhasattr(o, attr_name). Эта функция всегда завершается успешно.Обратите внимание, что исключения, возникающие при вызове методов
__getattr__()и__getattribute__(), подавляются. Для получения сообщений об ошибках используйте вместо этогоPyObject_GetAttr().
-
int
PyObject_HasAttrString(PyObject *o, const char *attr_name)¶ Возвращает
1, если o имеет атрибут attr_name, и0в противном случае. Это эквивалентно выражению Pythonhasattr(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. Это эквивалент инструкции Pythono.attr_name = v.Если v равно NULL, атрибут удаляется, однако эта возможность устарела в пользу использования
PyObject_DelAttr().
-
int
PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)¶ Устанавливает значение атрибута с именем attr_name для объекта o равным значению v. В случае ошибки возбуждает исключение и возвращает
-1; при успехе возвращает0. Это эквивалент инструкции Pythono.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. Это эквивалент инструкции 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)¶ Универсальная реализация геттера дескриптора
__dict__. При необходимости создаёт словарь.Новое в версии 3.3.
-
int
PyObject_GenericSetDict(PyObject *o, 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, что соответствует<,<=,==,!=,>или>=соответственно. Это эквивалент выражения Pythono1 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в противном случае. Это эквивалент выражения Pythono1 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: Эта функция теперь включает отладочное утверждение, помогающее гарантировать, что она не игнорирует активное исключение без уведомления.
-
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), при передаче целого числа o возбуждается TypeError вместо создания байтового объекта, инициализированного нулями.
-
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_object, PyObject *args, PyObject *kw)¶ - Возвращаемое значение: новая ссылка.
Вызывает вызываемый объект Python callable_object с аргументами, заданными кортежем args, и именованными аргументами, заданными словарём kw. Если именованные аргументы не нужны, kw может быть NULL. args не должен быть NULL; если аргументы не нужны, используйте пустой кортеж. При успехе возвращает результат вызова, при неудаче – NULL. Это эквивалент выражения Python
callable_object(*args, **kw).
-
PyObject*
PyObject_CallObject(PyObject *callable_object, PyObject *args)¶ - Возвращаемое значение: новая ссылка.
Вызывает вызываемый объект Python callable_object с аргументами, заданными кортежем args. Если аргументы не нужны, args может быть NULL. При успехе возвращает результат вызова, при неудаче – NULL. Это эквивалент выражения Python
callable_object(*args).
-
PyObject*
PyObject_CallFunction(PyObject *callable, const char *format, ...)¶ - Возвращаемое значение: новая ссылка.
Вызывает вызываемый объект Python callable с переменным числом аргументов C. Аргументы C описываются строкой формата в стиле
Py_BuildValue(). Формат может быть NULL, что означает отсутствие аргументов. При успехе возвращает результат вызова, при неудаче – NULL. Это эквивалент выражения Pythoncallable(*args). Обратите внимание: если передаются только аргументыPyObject *, тоPyObject_CallFunctionObjArgs()является более быстрой альтернативой.Изменено в версии 3.4: Тип format был изменён с
char *.
-
PyObject*
PyObject_CallMethod(PyObject *o, const char *method, const char *format, ...)¶ - Возвращаемое значение: новая ссылка.
Вызывает метод с именем method объекта o с переменным числом аргументов C. Аргументы C описываются строкой формата
Py_BuildValue(), которая должна порождать кортеж. Формат может быть NULL, что означает отсутствие аргументов. При успехе возвращает результат вызова, при неудаче – NULL. Это эквивалент выражения Pythono.method(args). Обратите внимание: если передаются только аргументыPyObject *, тоPyObject_CallMethodObjArgs()является более быстрой альтернативой.Изменено в версии 3.4: Типы method и format были изменены с
char *.
-
PyObject*
PyObject_CallFunctionObjArgs(PyObject *callable, ..., NULL)¶ - Возвращаемое значение: новая ссылка.
Вызывает вызываемый объект Python callable с переменным числом аргументов
PyObject*. Аргументы передаются как переменное число параметров, за которыми следует NULL. При успехе возвращает результат вызова, при неудаче – NULL.
-
PyObject*
PyObject_CallMethodObjArgs(PyObject *o, PyObject *name, ..., NULL)¶ - Возвращаемое значение: новая ссылка.
Вызывает метод объекта o, имя которого задано как объект строки Python в name. Он вызывается с переменным числом аргументов
PyObject*. Аргументы передаются как переменное число параметров, за которыми следует NULL. При успехе возвращает результат вызова, при неудаче – NULL.
-
Py_hash_t
PyObject_Hash(PyObject *o)¶ Вычисляет и возвращает хеш-значение объекта o. При неудаче возвращает
-1. Это эквивалент выражения Pythonhash(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в противном случае. Эквивалентно выражению Pythonnot not o. При неудаче возвращает-1.
-
int
PyObject_Not(PyObject *o)¶ Возвращает
0, если объект o считается истинным, и1в противном случае. Эквивалентно выражению Pythonnot o. При неудаче возвращает-1.
-
PyObject*
PyObject_Type(PyObject *o)¶ - Возвращаемое значение: новая ссылка.
Если o не равно NULL, возвращает объект типа, соответствующий типу объекта o. При неудаче возбуждает
SystemErrorи возвращает NULL. Это эквивалент выражения Pythontype(o). Эта функция увеличивает счётчик ссылок возвращаемого значения. Нет особых причин использовать эту функцию вместо обычного выраженияo->ob_type, которое возвращает указатель типаPyTypeObject*, за исключением случаев, когда требуется увеличенный счётчик ссылок.
-
int
PyObject_TypeCheck(PyObject *o, PyTypeObject *type)¶ Возвращает истину, если объект o имеет тип type или является подтипом type. Оба параметра не должны быть NULL.
-
Py_ssize_t
PyObject_Size(PyObject *o)¶ -
Py_ssize_t
PyObject_Length(PyObject *o)¶ Возвращает длину объекта o. Если объект o предоставляет протоколы последовательности и отображения, возвращается длина последовательности. При ошибке возвращается
-1. Эквивалентно выражению Pythonlen(o).
-
Py_ssize_t
PyObject_LengthHint(PyObject *o, Py_ssize_t default)¶ Возвращает оценочную длину объекта o. Сначала пытается вернуть его фактическую длину, затем оценку с помощью
__length_hint__(), и в итоге возвращает значение по умолчанию. При ошибке возвращает-1. Эквивалентно выражению Pythonoperator.length_hint(o, default).Новое в версии 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при успехе. Это эквивалент оператора Pythono[key] = v.
-
int
PyObject_DelItem(PyObject *o, PyObject *key)¶ Удаляет сопоставление для объекта key из объекта o. Возвращает
-1при неудаче. Эквивалентно инструкции Pythondel o[key].
-
PyObject*
PyObject_Dir(PyObject *o)¶ - Возвращаемое значение: новая ссылка.
Это эквивалент выражения Python
dir(o); возвращает (возможно пустой) список строк, соответствующих аргументу-объекту, или NULL в случае ошибки. Если аргумент равен NULL, это аналогично Pythondir(): возвращает имена текущих локальных переменных; в этом случае, если нет активного фрейма выполнения, возвращается NULL, ноPyErr_Occurred()вернёт ложь.