Документация Python неофициальный перевод

object.md

236 строк · 26.6 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/2.7/c-api/object.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Протокол объектов89#### `int PyObject_Print(PyObject *o, FILE *fp, int flags)`1011Выводит объект *o* в файл *fp*. В случае ошибки возвращает `-1`. Аргумент flags используется для включения определённых параметров вывода. Единственный поддерживаемый в настоящее время параметр – `Py_PRINT_RAW`; если он указан, записывается [`str()`](https://python-all.ru/2.7/library/functions.html#str) объекта вместо [`repr()`](https://python-all.ru/2.7/library/functions.html#repr).1213#### `int PyObject_HasAttr(PyObject *o, PyObject *attr_name)`1415Возвращает `1`, если *o* имеет атрибут *attr\_name*, и `0` в противном случае. Это эквивалентно выражению Python `hasattr(o, attr_name)`. Эта функция всегда завершается успешно.1617#### `int PyObject_HasAttrString(PyObject *o, const char *attr_name)`1819Возвращает `1`, если *o* имеет атрибут *attr\_name*, и `0` в противном случае. Это эквивалентно выражению Python `hasattr(o, attr_name)`. Эта функция всегда завершается успешно.2021#### `PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name)`2223*Возвращаемое значение: новая ссылка.*2425Извлекает атрибут с именем *attr\_name* из объекта *o*. При успехе возвращает значение атрибута, при неудаче – *NULL*. Это эквивалент выражения Python `o.attr_name`.2627#### `PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name)`2829*Возвращаемое значение: новая ссылка.*3031Извлекает атрибут с именем *attr\_name* из объекта *o*. При успехе возвращает значение атрибута, при неудаче – *NULL*. Это эквивалент выражения Python `o.attr_name`.3233#### `PyObject* PyObject_GenericGetAttr(PyObject *o, PyObject *name)`3435Обобщённая функция получения атрибута, предназначенная для размещения в слоте `tp_getattro` объекта типа. Она ищет дескриптор в словаре классов в MRO объекта, а также атрибут в [`__dict__`](https://python-all.ru/2.7/library/stdtypes.html#object.__dict__) объекта (если он есть). Как описано в [Реализация дескрипторов](https://python-all.ru/2.7/reference/datamodel.html#descriptors), дескрипторы данных имеют приоритет над атрибутами экземпляра, а дескрипторы не данных – нет. В противном случае вызывается [`AttributeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.AttributeError).3637#### `int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v)`3839Устанавливает значение атрибута с именем *attr\_name* для объекта *o* равным значению *v*. В случае ошибки возбуждает исключение и возвращает `-1`; при успехе возвращает `0`. Это эквивалент инструкции Python `o.attr_name = v`.4041Если *v* равно *NULL*, атрибут удаляется, однако эта возможность устарела в пользу использования [`PyObject_DelAttr()`](https://python-all.ru/2.7/c-api/object.html#c.PyObject_DelAttr).4243#### `int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v)`4445Устанавливает значение атрибута с именем *attr\_name* для объекта *o* равным значению *v*. В случае ошибки возбуждает исключение и возвращает `-1`; при успехе возвращает `0`. Это эквивалент инструкции Python `o.attr_name = v`.4647Если *v* равно *NULL*, атрибут удаляется, однако эта возможность устарела в пользу использования [`PyObject_DelAttrString()`](https://python-all.ru/2.7/c-api/object.html#c.PyObject_DelAttrString).4849#### `int PyObject_GenericSetAttr(PyObject *o, PyObject *name, PyObject *value)`5051Универсальная функция установки и удаления атрибута, предназначенная для помещения в слот [`tp_setattro`](https://python-all.ru/2.7/c-api/typeobj.html#c.PyTypeObject.tp_setattro) объекта типа. Она ищет дескриптор данных в словаре классов в MRO объекта, и если он найден, то приоритет имеет установка или удаление атрибута в словаре экземпляра. В противном случае атрибут устанавливается или удаляется в [`__dict__`](https://python-all.ru/2.7/library/stdtypes.html#object.__dict__) объекта (если он есть). При успехе возвращается `0`, иначе возбуждается [`AttributeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.AttributeError) и возвращается `-1`.5253#### `int PyObject_DelAttr(PyObject *o, PyObject *attr_name)`5455Удаляет атрибут с именем *attr\_name* у объекта *o*. При ошибке возвращает `-1`. Это эквивалент инструкции Python `del o.attr_name`.5657#### `int PyObject_DelAttrString(PyObject *o, const char *attr_name)`5859Удаляет атрибут с именем *attr\_name* у объекта *o*. При ошибке возвращает `-1`. Это эквивалент инструкции Python `del o.attr_name`.6061#### `PyObject* PyObject_RichCompare(PyObject *o1, PyObject *o2, int opid)`6263*Возвращаемое значение: новая ссылка.*6465Сравнивает значения *o1* и *o2* с помощью операции, заданной в *opid*, которая должна быть одной из `Py_LT`, `Py_LE`, `Py_EQ`, `Py_NE`, `Py_GT` или `Py_GE`, что соответствует `<`, `<=`, `==`, `!=`, `>` или `>=` соответственно. Это эквивалент выражения Python `o1 op o2`, где `op` – оператор, соответствующий *opid*. При успехе возвращает результат сравнения, при неудаче – *NULL*.6667#### `int PyObject_RichCompareBool(PyObject *o1, PyObject *o2, int opid)`6869Сравнивает значения *o1* и *o2* с помощью операции, заданной в *opid*, которая должна быть одной из `Py_LT`, `Py_LE`, `Py_EQ`, `Py_NE`, `Py_GT` или `Py_GE`, соответствующих `<`, `<=`, `==`, `!=`, `>` или `>=` соответственно. Возвращает `-1` в случае ошибки, `0` если результат ложный, `1` в противном случае. Это эквивалент выражения Python `o1 op o2`, где `op` – оператор, соответствующий *opid*.7071> **Примечание**72>73> Если *o1* и *o2* – один и тот же объект, [`PyObject_RichCompareBool()`](https://python-all.ru/2.7/c-api/object.html#c.PyObject_RichCompareBool) всегда будет возвращать `1` для `Py_EQ` и `0` для `Py_NE`.7475#### `int PyObject_Cmp(PyObject *o1, PyObject *o2, int *result)`7677Сравнивает значения *o1* и *o2* с помощью процедуры, предоставленной *o1*, если таковая существует, в противном случае – с помощью процедуры, предоставленной *o2*. Результат сравнения возвращается в *result*. В случае ошибки возвращает `-1`. Это эквивалент оператора Python `result = cmp(o1, o2)`.7879#### `int PyObject_Compare(PyObject *o1, PyObject *o2)`8081Сравнивает значения *o1* и *o2* с помощью процедуры, предоставленной *o1*, если таковая существует, в противном случае – с помощью процедуры, предоставленной *o2*. В случае успеха возвращает результат сравнения. При ошибке возвращаемое значение не определено; используйте [`PyErr_Occurred()`](https://python-all.ru/2.7/c-api/exceptions.html#c.PyErr_Occurred) для обнаружения ошибки. Это эквивалент выражения Python `cmp(o1, o2)`.8283#### `PyObject* PyObject_Repr(PyObject *o)`8485*Возвращаемое значение: новая ссылка.*8687Вычисляет строковое представление объекта *o*. Возвращает строковое представление в случае успеха, *NULL* – в случае ошибки. Это эквивалент выражения Python `repr(o)`. Вызывается встроенной функцией [`repr()`](https://python-all.ru/2.7/library/functions.html#repr) и обратными кавычками.8889#### `PyObject* PyObject_Str(PyObject *o)`9091*Возвращаемое значение: новая ссылка.*9293Вычисляет строковое представление объекта *o*. Возвращает строковое представление в случае успеха, *NULL* – в случае ошибки. Это эквивалент выражения Python `str(o)`. Вызывается встроенной функцией [`str()`](https://python-all.ru/2.7/library/functions.html#str) и оператором [`print`](https://python-all.ru/2.7/reference/simple_stmts.html#print).9495#### `PyObject* PyObject_Bytes(PyObject *o)`9697Вычисляет байтовое представление объекта *o*. В Python 2.x это просто псевдоним для [`PyObject_Str()`](https://python-all.ru/2.7/c-api/object.html#c.PyObject_Str).9899#### `PyObject* PyObject_Unicode(PyObject *o)`100101*Возвращаемое значение: новая ссылка.*102103Вычисляет строковое представление в Unicode для объекта *o*. Возвращает строковое представление в Unicode в случае успеха, *NULL* – в случае ошибки. Это эквивалент выражения Python `unicode(o)`. Вызывается встроенной функцией [`unicode()`](https://python-all.ru/2.7/library/functions.html#unicode).104105#### `int PyObject_IsInstance(PyObject *inst, PyObject *cls)`106107Returns `1` if *inst* is an instance of the class *cls* or a subclass of *cls*, or `0` if not. On error, returns `-1` and sets an exception. If *cls* is a type object rather than a class object, [`PyObject_IsInstance()`](https://python-all.ru/2.7/c-api/object.html#c.PyObject_IsInstance) returns `1` if *inst* is of type *cls*. If *cls* is a tuple, the check will be done against every entry in *cls*. The result will be `1` when at least one of the checks returns `1`, otherwise it will be `0`. If *inst* is not a class instance and *cls* is neither a type object, nor a class object, nor a tuple, *inst* must have a [`__class__`](https://python-all.ru/2.7/library/stdtypes.html#instance.__class__) attribute – the class relationship of the value of that attribute with *cls* will be used to determine the result of this function.108109Новое в версии 2.1.110111Изменено в версии 2.2: Добавлена поддержка кортежа в качестве второго аргумента.112113Определение подкласса выполняется довольно прямолинейно, но содержит нюанс, о котором разработчикам расширений системы классов стоит знать. Если `A` и `B` являются объектами классов, то `B` является подклассом `A`, если он наследует от `A` прямо или косвенно. Если хотя бы один из них не является объектом класса, используется более общий механизм для определения классовых отношений двух объектов. При проверке того, является ли *B* подклассом *A*, если *A* это *B*, [`PyObject_IsSubclass()`](https://python-all.ru/2.7/c-api/object.html#c.PyObject_IsSubclass) возвращает true. Если *A* и *B* являются разными объектами, атрибут [`__bases__`](https://python-all.ru/2.7/library/stdtypes.html#class.__bases__) объекта *B*'s просматривается в глубину на предмет наличия *A* – считается, что наличие атрибута [`__bases__`](https://python-all.ru/2.7/library/stdtypes.html#class.__bases__) достаточно для такого определения.114115#### `int PyObject_IsSubclass(PyObject *derived, PyObject *cls)`116117Возвращает `1`, если класс *derived* идентичен классу *cls* или наследуется от него, иначе возвращает `0`. В случае ошибки возвращает `-1`. Если *cls* является кортежем, проверка будет выполнена для каждого элемента *cls*. Результат будет `1`, когда хотя бы одна из проверок возвращает `1`, иначе `0`. Если *derived* или *cls* не являются реальными объектами классов (или кортежем), эта функция использует описанный выше общий алгоритм.118119Новое в версии 2.1.120121Изменено в версии 2.3: Более старые версии Python не поддерживали кортеж в качестве второго аргумента.122123#### `int PyCallable_Check(PyObject *o)`124125Определяет, является ли объект *o* вызываемым. Возвращает `1`, если объект вызываем, и `0` в противном случае. Эта функция всегда завершается успешно.126127#### `PyObject* PyObject_Call(PyObject *callable_object, PyObject *args, PyObject *kw)`128129*Возвращаемое значение: новая ссылка.*130131Вызывает вызываемый объект Python *callable\_object* с аргументами, заданными кортежем *args*, и именованными аргументами, заданными словарём *kw*. Если именованные аргументы не нужны, *kw* может быть *NULL*. *args* не должен быть *NULL*; используйте пустой кортеж, если аргументы не нужны. Возвращает результат вызова в случае успеха или *NULL* в случае ошибки. Это эквивалент выражения Python `apply(callable_object, args, kw)` или `callable_object(*args, **kw)`.132133Новое в версии 2.2.134135#### `PyObject* PyObject_CallObject(PyObject *callable_object, PyObject *args)`136137*Возвращаемое значение: новая ссылка.*138139Вызывает вызываемый объект Python *callable\_object* с аргументами, заданными кортежем *args*. Если аргументы не нужны, *args* может быть *NULL*. Возвращает результат вызова в случае успеха или *NULL* в случае ошибки. Это эквивалент выражения Python `apply(callable_object, args)` или `callable_object(*args)`.140141#### `PyObject* PyObject_CallFunction(PyObject *callable, char *format, ...)`142143*Возвращаемое значение: новая ссылка.*144145Вызывает вызываемый объект Python *callable* с переменным числом C-аргументов. C-аргументы описываются с помощью строки формата в стиле [`Py_BuildValue()`](https://python-all.ru/2.7/c-api/arg.html#c.Py_BuildValue). Формат может быть *NULL*, что означает отсутствие аргументов. Возвращает результат вызова в случае успеха или *NULL* в случае ошибки. Это эквивалент выражения Python `apply(callable, args)` или `callable(*args)`. Обратите внимание: если передаются только аргументы [`PyObject *`](https://python-all.ru/2.7/c-api/structures.html#c.PyObject), [`PyObject_CallFunctionObjArgs()`](https://python-all.ru/2.7/c-api/object.html#c.PyObject_CallFunctionObjArgs) является более быстрой альтернативой.146147#### `PyObject* PyObject_CallMethod(PyObject *o, char *method, char *format, ...)`148149*Возвращаемое значение: новая ссылка.*150151Вызывает метод с именем *method* объекта *o* с переменным числом аргументов C. Аргументы C описываются строкой формата [`Py_BuildValue()`](https://python-all.ru/2.7/c-api/arg.html#c.Py_BuildValue), которая должна порождать кортеж. Формат может быть *NULL*, что означает отсутствие аргументов. При успехе возвращает результат вызова, при неудаче – *NULL*. Это эквивалент выражения Python `o.method(args)`. Обратите внимание: если передаются только аргументы [`PyObject *`](https://python-all.ru/2.7/c-api/structures.html#c.PyObject), то [`PyObject_CallMethodObjArgs()`](https://python-all.ru/2.7/c-api/object.html#c.PyObject_CallMethodObjArgs) является более быстрой альтернативой.152153#### `PyObject* PyObject_CallFunctionObjArgs(PyObject *callable, ..., NULL)`154155*Возвращаемое значение: новая ссылка.*156157Вызывает вызываемый объект Python *callable* с переменным числом аргументов [`PyObject*`](https://python-all.ru/2.7/c-api/structures.html#c.PyObject). Аргументы передаются как переменное число параметров, за которыми следует *NULL*. При успехе возвращает результат вызова, при неудаче – *NULL*.158159Новое в версии 2.2.160161#### `PyObject* PyObject_CallMethodObjArgs(PyObject *o, PyObject *name, ..., NULL)`162163*Возвращаемое значение: новая ссылка.*164165Вызывает метод объекта *o*, имя которого задано как объект строки Python в *name*. Он вызывается с переменным числом аргументов [`PyObject*`](https://python-all.ru/2.7/c-api/structures.html#c.PyObject). Аргументы передаются как переменное число параметров, за которыми следует *NULL*. При успехе возвращает результат вызова, при неудаче – *NULL*.166167Новое в версии 2.2.168169#### `long PyObject_Hash(PyObject *o)`170171Вычисляет и возвращает хеш-значение объекта *o*. При неудаче возвращает `-1`. Это эквивалент выражения Python `hash(o)`.172173#### `long PyObject_HashNotImplemented(PyObject *o)`174175Устанавливает [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError), указывающий, что `type(o)` не хешируется, и возвращает `-1`. Эта функция получает особую обработку при сохранении в слоте `tp_hash`, позволяя типу явно указать интерпретатору, что он не хешируется.176177Новое в версии 2.6.178179#### `int PyObject_IsTrue(PyObject *o)`180181Возвращает `1`, если объект *o* считается истинным, и `0` в противном случае. Эквивалентно выражению Python `not not o`. При неудаче возвращает `-1`.182183#### `int PyObject_Not(PyObject *o)`184185Возвращает `0`, если объект *o* считается истинным, и `1` в противном случае. Эквивалентно выражению Python `not o`. При неудаче возвращает `-1`.186187#### `PyObject* PyObject_Type(PyObject *o)`188189*Возвращаемое значение: новая ссылка.*190191Если *o* не равно *NULL*, возвращает объект типа, соответствующий типу объекта *o*. При неудаче возбуждает [`SystemError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.SystemError) и возвращает *NULL*. Это эквивалент выражения Python `type(o)`. Эта функция увеличивает счётчик ссылок возвращаемого значения. Нет особых причин использовать эту функцию вместо обычного выражения `o->ob_type`, которое возвращает указатель типа [`PyTypeObject*`](https://python-all.ru/2.7/c-api/type.html#c.PyTypeObject), за исключением случаев, когда требуется увеличенный счётчик ссылок.192193#### `int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)`194195Возвращает истину, если объект *o* имеет тип *type* или является подтипом *type*. Оба параметра не должны быть *NULL*.196197Новое в версии 2.2.198199#### `Py_ssize_t PyObject_Length(PyObject *o)`200201#### `Py_ssize_t PyObject_Size(PyObject *o)`202203Возвращает длину объекта *o*. Если объект *o* предоставляет протоколы последовательности и отображения, возвращается длина последовательности. При ошибке возвращается `-1`. Эквивалентно выражению Python `len(o)`.204205Изменено в версии 2.5: Эти функции возвращали тип `int`. Это может потребовать изменений в вашем коде для корректной поддержки 64-битных систем.206207#### `PyObject* PyObject_GetItem(PyObject *o, PyObject *key)`208209*Возвращаемое значение: новая ссылка.*210211Возвращает элемент *o*, соответствующий объекту *key*, или *NULL* при неудаче. Это эквивалент выражения Python `o[key]`.212213#### `int PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v)`214215Отображает объект *key* на значение *v*. Возбуждает исключение и возвращает `-1` при неудаче; возвращает `0` при успехе. Это эквивалент оператора Python `o[key] = v`.216217#### `int PyObject_DelItem(PyObject *o, PyObject *key)`218219Удаляет отображение для *ключа* из *o*. В случае неудачи возвращает `-1`. Это eквивалентно оператору Python `del o[key]`.220221#### `int PyObject_AsFileDescriptor(PyObject *o)`222223Извлекает файловый дескриптор из объекта Python. Если объект является целым числом или длинным целым, возвращается его значение. Если нет, вызывается метод `fileno()` объекта, если он существует; метод должен вернуть целое или длинное целое, которое возвращается как значение файлового дескриптора. В случае ошибки возвращает `-1`.224225#### `PyObject* PyObject_Dir(PyObject *o)`226227*Возвращаемое значение: новая ссылка.*228229Это эквивалент выражения Python `dir(o)`; возвращает (возможно пустой) список строк, соответствующих аргументу-объекту, или *NULL* в случае ошибки. Если аргумент равен *NULL*, это аналогично Python `dir()`: возвращает имена текущих локальных переменных; в этом случае, если нет активного фрейма выполнения, возвращается *NULL*, но [`PyErr_Occurred()`](https://python-all.ru/2.7/c-api/exceptions.html#c.PyErr_Occurred) вернёт ложь.230231#### `PyObject* PyObject_GetIter(PyObject *o)`232233*Возвращаемое значение: новая ссылка.*234235Это эквивалент выражения Python `iter(o)`. Возвращает новый итератор для аргумента-объекта или сам объект, если он уже является итератором. Возбуждает [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError) и возвращает *NULL*, если объект не может быть проитерирован.236