Объекты-дескрипторы
«Дескрипторы» — это объекты, описывающие некоторые атрибуты объекта. Они находятся в словаре объектов типов.
-
PyTypeObject PyProperty_Type -
Часть стабильного ABI.
Объект типа для встроенных типов дескрипторов.
-
PyObject *PyDescr_NewGetSet(PyTypeObject *type, struct PyGetSetDef *getset) -
Возвращаемое значение: новая ссылка. Часть стабильного ABI.
Создаёт новый дескриптор для получения и установки атрибутов типа расширения type на основе структуры
PyGetSetDefgetset.Дескрипторы для получения и установки атрибутов предоставляют доступ к атрибутам, реализованным функциями-геттерами и сеттерами на C, а не хранящимся непосредственно в экземпляре. Это тот же тип дескриптора, который создаётся для записей в
tp_getset; в Python он представлен объектомtypes.GetSetDescriptorType.В случае успеха возвращает сильную ссылку на дескриптор. В случае ошибки возвращает
NULLи устанавливает исключение.
-
PyObject *PyDescr_NewMember(PyTypeObject *type, struct PyMemberDef *member) -
Возвращаемое значение: новая ссылка. Часть стабильного ABI.
Создаёт новый дескриптор члена типа расширения type на основе структуры
PyMemberDefmember.Дескрипторы членов предоставляют доступ к полям структуры 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 на основе структуры
PyMethodDefmeth.Дескрипторы методов предоставляют доступ к функциям 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 на основе структуры
wrapperbasebase и указателя на функцию оборачиваемого слота 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 на основе структуры
PyMethodDefmethod.Дескрипторы методов класса предоставляют доступ к методам 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