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

object.md

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

1> **Источник:** https://python-all.ru/3.0/c-api/object.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Протокол объектов89**\[PyObject\_Print\]int `PyObject_Print`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*, FILE *\*fp*, int *flags*)**1011Выводит объект1213*o*1415в файл1617*fp*1819. Возвращает2021`-1`2223в случае ошибки. Аргумент flags используется для включения определённых опций вывода. Единственная поддерживаемая в настоящее время опция –2425`Py_PRINT_RAW`2627; если она указана, выводится2829[`str()`](https://python-all.ru/3.0/library/functions.html#str)3031объекта вместо3233[`repr()`](https://python-all.ru/3.0/library/functions.html#repr)3435.3637**\[PyObject\_HasAttr\]int `PyObject_HasAttr`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*attr\_name*)**3839Возвращает4041`1`4243, если4445*o*4647имеет атрибут4849*attr\_name*5051, и5253`0`5455в противном случае. Это эквивалентно выражению Python5657`hasattr(o, attr_name)`5859. Эта функция всегда завершается успешно.6061**\[PyObject\_HasAttrString\]int `PyObject_HasAttrString`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*, const char *\*attr\_name*)**6263Возвращает6465`1`6667, если6869*o*7071имеет атрибут7273*attr\_name*7475, и7677`0`7879в противном случае. Это эквивалентно выражению Python8081`hasattr(o, attr_name)`8283. Эта функция всегда завершается успешно.8485**\[PyObject\_GetAttr\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_GetAttr`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*attr\_name*)**8687*Возвращаемое значение: новая ссылка.*8889Извлекает атрибут с именем *attr\_name* из объекта *o*. Возвращает значение атрибута при успехе или *NULL* при неудаче. Это эквивалент выражения Python `o.attr_name`.9091**\[PyObject\_GetAttrString\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_GetAttrString`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*, const char *\*attr\_name*)**9293*Возвращаемое значение: новая ссылка.*9495Извлекает атрибут с именем *attr\_name* из объекта *o*. Возвращает значение атрибута при успехе или *NULL* при неудаче. Это эквивалент выражения Python `o.attr_name`.9697**\[PyObject\_SetAttr\]int `PyObject_SetAttr`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*attr\_name*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*v*)**9899Устанавливает значение атрибута с именем100101*attr\_name*102103для объекта104105*o*106107равным108109*v*110111. Возвращает112113`-1`114115при неудаче. Это эквивалент оператора Python116117`o.attr_name = v`118119.120121**\[PyObject\_SetAttrString\]int `PyObject_SetAttrString`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*, const char *\*attr\_name*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*v*)**122123Устанавливает значение атрибута с именем124125*attr\_name*126127для объекта128129*o*130131равным132133*v*134135. Возвращает136137`-1`138139при неудаче. Это эквивалент оператора Python140141`o.attr_name = v`142143.144145**\[PyObject\_DelAttr\]int `PyObject_DelAttr`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*attr\_name*)**146147Удаляет атрибут с именем148149*attr\_name*150151для объекта152153*o*154155. Возвращает156157`-1`158159при неудаче. Это эквивалент оператора Python160161`del o.attr_name`162163.164165**\[PyObject\_DelAttrString\]int `PyObject_DelAttrString`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*, const char *\*attr\_name*)**166167Удаляет атрибут с именем168169*attr\_name*170171для объекта172173*o*174175. Возвращает176177`-1`178179при неудаче. Это эквивалент оператора Python180181`del o.attr_name`182183.184185**\[PyObject\_RichCompare\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_RichCompare`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o2*, int *opid*)**186187*Возвращаемое значение: новая ссылка.*188189Сравнивает значения *o1* и *o2* с помощью операции, заданной *opid*, которая должна быть одной из `Py_LT`, `Py_LE`, `Py_EQ`, `Py_NE`, `Py_GT` или `Py_GE`, что соответствует `<`, `<=`, `==`, `!=`, `>` или `>=` соответственно. Это эквивалент выражения Python `o1 op o2`, где `op` – оператор, соответствующий *opid*. Возвращает результат сравнения в случае успеха или *NULL* при ошибке.190191**\[PyObject\_RichCompareBool\]int `PyObject_RichCompareBool`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o1*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o2*, int *opid*)**192193Сравнивает значения194195*o1*196197и198199*o2*200201с помощью операции, заданной202203*opid*204205, которая должна быть одной из206207`Py_LT`208209,210211`Py_LE`212213,214215`Py_EQ`216217,218219`Py_NE`220221,222223`Py_GT`224225или226227`Py_GE`228229, что соответствует230231`<`232233,234235`<=`236237,238239`==`240241,242243`!=`244245,246247`>`248249или250251`>=`252253соответственно. Возвращает254255`-1`256257при ошибке,258259`0`260261если результат ложный,262263`1`264265в противном случае. Это эквивалент выражения Python266267`o1 op o2`268269, где270271`op`272273– оператор, соответствующий274275*opid*276277.278279**\[PyObject\_Repr\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_Repr`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**280281*Возвращаемое значение: новая ссылка.*282283Вычисляет строковое представление объекта *o*. Возвращает строковое представление в случае успеха или *NULL* при ошибке. Это эквивалент выражения Python `repr(o)`. Вызывается встроенной функцией [`repr()`](https://python-all.ru/3.0/library/functions.html#repr).284285**\[PyObject\_ASCII\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_ASCII`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**286287Как и [`PyObject_Repr`](https://python-all.ru/3.0/c-api/object.html#PyObject_Repr), вычисляет строковое представление объекта *o*, но экранирует не-ASCII символы в строке, возвращаемой [`PyObject_Repr`](https://python-all.ru/3.0/c-api/object.html#PyObject_Repr), с помощью `\x`, `\u` или `\U`. В результате получается строка, похожая на возвращаемую [`PyObject_Repr`](https://python-all.ru/3.0/c-api/object.html#PyObject_Repr) в Python 2. Вызывается встроенной функцией [`ascii()`](https://python-all.ru/3.0/library/functions.html#ascii).288289**\[PyObject\_Str\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_Str`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**290291*Возвращаемое значение: новая ссылка.*292293Вычисляет строковое представление объекта *o*. Возвращает строковое представление в случае успеха или *NULL* при ошибке. Это эквивалент выражения Python `str(o)`. Вызывается встроенной функцией [`str()`](https://python-all.ru/3.0/library/functions.html#str) и, следовательно, функцией [`print()`](https://python-all.ru/3.0/library/functions.html#print).294295**\[PyObject\_Bytes\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_Bytes`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**296297Вычисляет байтовое представление объекта *o*. *NULL* возвращается при ошибке и объект bytes при успехе. Это эквивалентно выражению Python `bytes(o)`.298299**\[PyObject\_IsInstance\]int `PyObject_IsInstance`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*inst*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*cls*)**300301Возвращает302303`1`304305, если306307*inst*308309является экземпляром класса310311*cls*312313или подкласса314315*cls*316317, и318319`0`320321в противном случае. При ошибке возвращает322323`-1`324325и устанавливает исключение. Если326327*cls*328329– объект-тип, а не объект-класс, то330331[`PyObject_IsInstance`](https://python-all.ru/3.0/c-api/object.html#PyObject_IsInstance)332333возвращает334335`1`336337, если338339*inst*340341имеет тип342343*cls*344345. Если346347*cls*348349– кортеж, проверка выполняется для каждого элемента350351*cls*352353. Результат будет354355`1`356357, когда хотя бы одна проверка вернёт358359`1`360361, иначе362363`0`364365. Если366367*inst*368369не является экземпляром класса, а370371*cls*372373не является ни объектом-типом, ни объектом-классом, ни кортежем, то374375*inst*376377должен иметь атрибут378379`__class__`380381– отношение классов значения этого атрибута к382383*cls*384385будет использовано для определения результата этой функции.386387Определение подкласса выполняется довольно прямолинейно, но содержит одну особенность, о которой разработчикам расширений системы классов стоит знать. Если `A` и `B` – объекты-классы, то `B` является подклассом `A`, если он наследует от `A` прямо или косвенно. Если хотя бы один из них не является объектом-классом, применяется более общий механизм для определения отношения классов двух объектов. При проверке, является ли *B* подклассом *A*, если *A* равно *B*, то [`PyObject_IsSubclass`](https://python-all.ru/3.0/c-api/object.html#PyObject_IsSubclass) возвращает истину. Если *A* и *B* – разные объекты, то атрибут *B*‘s `__bases__` ищется в глубину для *A* – наличие атрибута `__bases__` считается достаточным для этого определения.388389**\[PyObject\_IsSubclass\]int `PyObject_IsSubclass`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*derived*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*cls*)**390391Возвращает392393`1`394395, если класс396397*derived*398399идентичен классу400401*cls*402403или наследуется от него, иначе возвращает404405`0`406407. В случае ошибки возвращает408409`-1`410411. Если412413*cls*414415является кортежем, проверка будет выполнена для каждого элемента416417*cls*418419. Результат будет420421`1`422423, когда хотя бы одна из проверок возвращает424425`1`426427, иначе428429`0`430431. Если432433*derived*434435или436437*cls*438439не являются реальными объектами классов (или кортежем), эта функция использует описанный выше общий алгоритм.440441**\[PyCallable\_Check\]int `PyCallable_Check`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**442443Определяет, является ли объект444445*o*446447вызываемым. Возвращает448449`1`450451, если объект вызываем, и452453`0`454455в противном случае. Эта функция всегда завершается успешно.456457**\[PyObject\_Call\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_Call`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*callable\_object*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*args*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*kw*)**458459*Возвращаемое значение: новая ссылка.*460461Вызывает вызываемый объект Python *callable\_object* с аргументами, заданными кортежем *args*, и именованными аргументами, заданными словарём *kw*. Если именованные аргументы не нужны, *kw* может быть *NULL*. *args* не должен быть *NULL*; если аргументы не нужны, используйте пустой кортеж. Возвращает результат вызова в случае успеха или *NULL* при ошибке. Это эквивалент выражения Python `callable_object(*args, **kw)`.462463**\[PyObject\_CallObject\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_CallObject`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*callable\_object*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*args*)**464465*Возвращаемое значение: новая ссылка.*466467Вызывает вызываемый объект Python *callable\_object* с аргументами, заданными кортежем *args*. Если аргументы не нужны, то *args* может быть *NULL*. Возвращает результат вызова в случае успеха или *NULL* при ошибке. Это эквивалент выражения Python `callable_object(*args)`.468469**\[PyObject\_CallFunction\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_CallFunction`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*callable*, char *\*format*, ...)**470471*Возвращаемое значение: новая ссылка.*472473Вызывает вызываемый объект Python *callable* с переменным количеством аргументов C. Аргументы C описываются строкой формата в стиле [`Py_BuildValue`](https://python-all.ru/3.0/c-api/arg.html#Py_BuildValue). Формат может быть *NULL*, что означает отсутствие аргументов. Возвращает результат вызова в случае успеха или *NULL* при неудаче. Это эквивалент выражения Python `callable(*args)`. Обратите внимание: если передаются только аргументы [`PyObject *`](https://python-all.ru/3.0/c-api/structures.html#PyObject), то более быстрой альтернативой является [`PyObject_CallFunctionObjArgs`](https://python-all.ru/3.0/c-api/object.html#PyObject_CallFunctionObjArgs).474475**\[PyObject\_CallMethod\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_CallMethod`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*, char *\*method*, char *\*format*, ...)**476477*Возвращаемое значение: новая ссылка.*478479Вызывает метод с именем *method* объекта *o* с переменным количеством аргументов C. Аргументы C описываются строкой формата в стиле [`Py_BuildValue`](https://python-all.ru/3.0/c-api/arg.html#Py_BuildValue), которая должна создавать кортеж. Формат может быть *NULL*, что означает отсутствие аргументов. Возвращает результат вызова в случае успеха или *NULL* при неудаче. Это эквивалент выражения Python `o.method(args)`. Обратите внимание: если передаются только аргументы [`PyObject *`](https://python-all.ru/3.0/c-api/structures.html#PyObject), то более быстрой альтернативой является [`PyObject_CallMethodObjArgs`](https://python-all.ru/3.0/c-api/object.html#PyObject_CallMethodObjArgs).480481**\[PyObject\_CallFunctionObjArgs\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_CallFunctionObjArgs`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*callable*, ..., NULL)**482483*Возвращаемое значение: новая ссылка.*484485Вызывает вызываемый объект Python *callable* с переменным числом аргументов типа [`PyObject*`](https://python-all.ru/3.0/c-api/structures.html#PyObject). Аргументы передаются как переменное число параметров, за которыми следует *NULL*. Возвращает результат вызова в случае успеха или *NULL* при ошибке.486487**\[PyObject\_CallMethodObjArgs\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_CallMethodObjArgs`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*name*, ..., NULL)**488489*Возвращаемое значение: новая ссылка.*490491Вызывает метод объекта *o*, где имя метода передаётся в виде строкового объекта Python в *name*. Вызывается с переменным числом аргументов [`PyObject*`](https://python-all.ru/3.0/c-api/structures.html#PyObject). Аргументы передаются как переменное число параметров, за которыми следует *NULL*. Возвращает результат вызова в случае успеха или *NULL* при ошибке.492493**\[PyObject\_Hash\]long `PyObject_Hash`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**494495Вычисляет и возвращает хеш-значение объекта *o*. В случае ошибки возвращает `-1`. Это эквивалент выражения Python `hash(o)`.496497**\[PyObject\_HashNotImplemented\]long `PyObject_HashNotImplemented`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**498499Устанавливает500501[`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError)502503, сообщающий, что504505`type(o)`506507не хешируется, и возвращает508509`-1`510511. Эта функция получает особую обработку, если помещена в слот512513`tp_hash`514515, позволяя типу явно указать интерпретатору, что он не хешируется.516517**\[PyObject\_IsTrue\]int `PyObject_IsTrue`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**518519Возвращает520521`1`522523, если объект524525*o*526527считается истинным, и528529`0`530531в противном случае. Это эквивалент выражения Python532533`not not o`534535. В случае ошибки возвращает536537`-1`538539.540541**\[PyObject\_Not\]int `PyObject_Not`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**542543Возвращает544545`0`546547, если объект548549*o*550551считается истинным, и552553`1`554555в противном случае. Это эквивалент выражения Python556557`not o`558559. В случае ошибки возвращает560561`-1`562563.564565**\[PyObject\_Type\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_Type`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**566567*Возвращаемое значение: новая ссылка.*568569Если *o* не равно *NULL*, возвращает объект типа, соответствующий типу объекта *o*. В случае ошибки возбуждает [`SystemError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.SystemError) и возвращает *NULL*. Это эквивалент выражения Python `type(o)`. Эта функция увеличивает счётчик ссылок возвращаемого значения. Нет особой причины использовать эту функцию вместо обычного выражения `o->ob_type`, которое возвращает указатель типа [`PyTypeObject*`](https://python-all.ru/3.0/c-api/type.html#PyTypeObject), за исключением случаев, когда требуется увеличенный счётчик ссылок.570571**\[PyObject\_TypeCheck\]int `PyObject_TypeCheck`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*, [PyTypeObject](https://python-all.ru/3.0/c-api/type.html#PyTypeObject) *\*type*)**572573Возвращает истину, если объект574575*o*576577имеет тип578579*type*580581или является подтипом582583*type*584585. Оба параметра не должны быть586587*NULL*588589.590591**\[PyObject\_Length\]Py\_ssize\_t `PyObject_Length`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**592593**Py\_ssize\_t `PyObject_Size`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**594595Возвращает длину объекта *o*. Если объект *o* предоставляет протоколы последовательности и отображения, возвращается длина последовательности. При ошибке возвращается `-1`. Это эквивалент выражения Python `len(o)`.596597**\[PyObject\_GetItem\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_GetItem`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*key*)**598599*Возвращаемое значение: новая ссылка.*600601Возвращает элемент *o*, соответствующий объекту *key*, или *NULL* при ошибке. Это эквивалентно выражению Python `o[key]`.602603**\[PyObject\_SetItem\]int `PyObject_SetItem`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*key*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*v*)**604605Сопоставляет объект606607*key*608609со значением610611*v*612613. При ошибке возвращает614615`-1`616617. Это эквивалент инструкции Python618619`o[key] = v`620621.622623**\[PyObject\_DelItem\]int `PyObject_DelItem`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*key*)**624625Удаляет отображение для626627*key*628629из630631*o*632633. При ошибке возвращает634635`-1`636637. Это эквивалент инструкции Python638639`del o[key]`640641.642643**\[PyObject\_Dir\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_Dir`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**644645*Возвращаемое значение: новая ссылка.*646647Это эквивалентно выражению Python `dir(o)`: возвращает (возможно, пустой) список строк, подходящих для переданного объекта, или *NULL* в случае ошибки. Если аргумент равен *NULL*, это аналогично Python `dir()`, возвращающему имена текущих локальных переменных; в этом случае, если нет активного фрейма выполнения, возвращается *NULL*, но [`PyErr_Occurred`](https://python-all.ru/3.0/c-api/exceptions.html#PyErr_Occurred) вернёт false.648649**\[PyObject\_GetIter\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyObject_GetIter`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*o*)**650651*Возвращаемое значение: новая ссылка.*652653Это эквивалент выражения Python `iter(o)`. Возвращает новый итератор для аргумента-объекта или сам объект, если он уже является итератором. Возбуждает [`TypeError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.TypeError) и возвращает *NULL*, если объект не может быть итерирован.654