Spec-Zone.ru › Python 3.14

Объекты-дескрипторы

«Дескрипторы» — это объекты, описывающие некоторые атрибуты объекта. Они находятся в словаре объектов типов.

PyTypeObject PyProperty_Type
Часть стабильного ABI.

Объект типа для встроенных типов дескрипторов.

PyObject *PyDescr_NewGetSet(PyTypeObject *type, struct PyGetSetDef *getset)
Возвращаемое значение: новая ссылка. Часть стабильного ABI.

Создаёт новый дескриптор для получения и установки атрибутов типа расширения type на основе структуры PyGetSetDef getset.

Дескрипторы для получения и установки атрибутов предоставляют доступ к атрибутам, реализованным функциями-геттерами и сеттерами на C, а не хранящимся непосредственно в экземпляре. Это тот же тип дескриптора, который создаётся для записей в tp_getset; в Python он представлен объектом types.GetSetDescriptorType.

В случае успеха возвращает сильную ссылку на дескриптор. В случае ошибки возвращает NULL и устанавливает исключение.

PyObject *PyDescr_NewMember(PyTypeObject *type, struct PyMemberDef *member)
Возвращаемое значение: новая ссылка. Часть стабильного ABI.

Создаёт новый дескриптор члена типа расширения type на основе структуры PyMemberDef member.

Дескрипторы членов предоставляют доступ к полям структуры C-типа как к атрибутам Python. Это тот же тип дескриптора, который создаётся для записей в tp_members; в Python он представлен объектом types.MemberDescriptorType.

В случае успеха возвращает сильную ссылку на дескриптор. В случае ошибки возвращает NULL и устанавливает исключение.

PyTypeObject PyMemberDescr_Type
Часть стабильного ABI.

Объект типа для дескрипторов членов, созданных на основе структур PyMemberDef. Эти дескрипторы предоставляют доступ к полям структуры C-типа как к атрибутам типа и соответствуют объектам types.MemberDescriptorType в Python.

PyTypeObject PyGetSetDescr_Type
Часть стабильного ABI.

Объект типа для дескрипторов получения и установки атрибутов, созданных на основе структур PyGetSetDef. Эти дескрипторы реализуют атрибуты, значения которых вычисляются функциями-геттерами и сеттерами на C, и используются для многих атрибутов встроенных типов. В Python им соответствуют объекты types.GetSetDescriptorType.

PyObject *PyDescr_NewMethod(PyTypeObject *type, struct PyMethodDef *meth)
Возвращаемое значение: новая ссылка. Часть стабильного ABI.

Создаёт новый дескриптор метода типа расширения type на основе структуры PyMethodDef meth.

Дескрипторы методов предоставляют доступ к функциям C-типа как к методам типа. Это тот же тип дескриптора, который создаётся для записей в tp_methods; в Python он представлен объектом types.MethodDescriptorType.

В случае успеха возвращает сильную ссылку на дескриптор. В случае ошибки возвращает NULL и устанавливает исключение.

PyTypeObject PyMethodDescr_Type
Часть стабильного ABI.

Объект типа для дескрипторов методов, созданных на основе структур PyMethodDef. Эти дескрипторы предоставляют доступ к функциям C-типа как к методам типа и соответствуют объектам types.MethodDescriptorType в Python.

struct wrapperbase

Описывает обёртку слота, используемую PyDescr_NewWrapper().

Каждая запись wrapperbase содержит видимое в Python имя и метаданные специального метода, реализованного слотом типа, а также функцию-обёртку, используемую для адаптации этого слота к соглашению о вызовах Python.

PyObject *PyDescr_NewWrapper(PyTypeObject *type, struct wrapperbase *base, void *wrapped)
Возвращаемое значение: новая ссылка.

Создаёт новый дескриптор-обёртку типа расширения type на основе структуры wrapperbase base и указателя на функцию оборачиваемого слота wrapped.

Дескрипторы-обёртки предоставляют доступ к специальным методам, реализованным слотами типа. Это тот же тип дескриптора, который CPython создаёт для специальных методов на основе слотов, например __repr__ или __add__; в Python он представлен объектом types.WrapperDescriptorType.

В случае успеха возвращает сильную ссылку на дескриптор. В случае ошибки возвращает NULL и устанавливает исключение.

PyTypeObject PyWrapperDescr_Type
Часть стабильного ABI.

Объект типа для дескрипторов-обёрток, создаваемых функциями PyDescr_NewWrapper() и PyWrapper_New(). Дескрипторы-обёртки используются внутри для предоставления доступа к специальным методам, реализованным с помощью структур-обёрток; в Python они представлены объектами types.WrapperDescriptorType.

PyObject *PyDescr_NewClassMethod(PyTypeObject *type, PyMethodDef *method)
Возвращаемое значение: новая ссылка. Часть стабильного ABI.

Создаёт новый дескриптор метода класса типа расширения type на основе структуры PyMethodDef method.

Дескрипторы методов класса предоставляют доступ к методам C-типа, которые при обращении получают класс, а не экземпляр. Это тот же тип дескриптора, который создаётся для записей METH_CLASS в tp_methods; в Python он представлен объектом types.ClassMethodDescriptorType.

В случае успеха возвращает сильную ссылку на дескриптор. В случае ошибки возвращает NULL и устанавливает исключение.

int PyDescr_IsData(PyObject *descr)

Возвращает ненулевое значение, если объект-дескриптор descr описывает атрибут данных, или 0, если он описывает метод. descr должен быть объектом-дескриптором; проверка ошибок не выполняется.

PyObject *PyWrapper_New(PyObject *d, PyObject *self)
Возвращаемое значение: новая ссылка. Часть стабильного ABI.

Создаёт новый связанный объект-обёртку на основе дескриптора-обёртки d и экземпляра self.

Это связанная форма дескриптора-обёртки, созданного функцией PyDescr_NewWrapper(). CPython создаёт такие объекты, когда к обёртке слота обращаются через экземпляр; в Python они представлены объектами types.MethodWrapperType.

В случае успеха возвращает сильную ссылку на объект-обёртку. В случае ошибки возвращает NULL и устанавливает исключение.

Встроенные дескрипторы

PyTypeObject PySuper_Type
Часть стабильного ABI.

Объект типа для объектов super. Это тот же объект, что и super на уровне Python.

PyTypeObject PyClassMethod_Type

Тип объектов методов класса. Это тот же объект, что и classmethod на уровне Python.

PyTypeObject PyClassMethodDescr_Type
Часть стабильного ABI.

Объект типа для дескрипторов методов класса на уровне C. Это тип дескрипторов, создаваемых для classmethod(), определённых в типах расширения на C; в Python им соответствуют объекты types.ClassMethodDescriptorType.

PyObject *PyClassMethod_New(PyObject *callable)

Создаёт новый объект classmethod, оборачивающий callable. callable должен быть вызываемым объектом и не должен быть NULL.

В случае успеха эта функция возвращает сильную ссылку на новый дескриптор метода класса. В случае ошибки эта функция возвращает NULL и устанавливает исключение.

PyTypeObject PyStaticMethod_Type

Тип объектов статических методов. Это тот же объект, что и staticmethod на уровне Python.

PyObject *PyStaticMethod_New(PyObject *callable)

Создаёт новый объект staticmethod, оборачивающий callable. callable должен быть вызываемым объектом и не должен быть NULL.

В случае успеха эта функция возвращает сильную ссылку на новый дескриптор статического метода. В случае ошибки эта функция возвращает NULL и устанавливает исключение.

© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/c-api/descriptor.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API