Содержание страницы
Объекты дескрипторов¶Descriptor Objects
«Дескрипторы» – это объекты, описывающие некоторый атрибут объекта. Они находятся в словаре объектов типов.
-
PyObject *PyDescr_NewGetSet(PyTypeObject *type, struct PyGetSetDef *getset)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт новый дескриптор get-set для типа расширения type из структуры
PyGetSetDefgetset.Дескрипторы get-set предоставляют доступ к атрибутам, реализованным через C-функции получения и установки, а не хранящимся напрямую в экземпляре. Это тот же вид дескрипторов, который создаётся для записей в
tp_getset, и в Python он представляется объектомtypes.GetSetDescriptorType.При успешном выполнении возвращает сильную ссылку на дескриптор. В случае ошибки возвращает
NULLс установленным исключением.
-
PyObject *PyDescr_NewMember(PyTypeObject *type, struct PyMemberDef *member)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт новый дескриптор элемента для типа расширения type из структуры
PyMemberDefmember.Дескрипторы элементов предоставляют поля C-структуры типа как атрибуты Python. Это тот же вид дескрипторов, который создаётся для записей в
tp_members, и в Python он представляется объектомtypes.MemberDescriptorType.При успешном выполнении возвращает сильную ссылку на дескриптор. В случае ошибки возвращает
NULLс установленным исключением.
-
PyTypeObject PyMemberDescr_Type¶
- Часть Stable ABI.
Объект типа для объектов дескрипторов элементов, созданных из структур
PyMemberDef. Эти дескрипторы предоставляют поля C-структуры как атрибуты типа и соответствуют объектамtypes.MemberDescriptorTypeв Python.
-
PyTypeObject PyGetSetDescr_Type¶
- Часть Stable ABI.
Объект типа для объектов дескрипторов get/set, созданных из структур
PyGetSetDef. Эти дескрипторы реализуют атрибуты, значение которых вычисляется C-функциями получения и установки, и используются для многих встроенных атрибутов типов. Они соответствуют объектамtypes.GetSetDescriptorTypeв Python.
-
PyObject *PyDescr_NewMethod(PyTypeObject *type, struct PyMethodDef *meth)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт новый дескриптор метода для типа расширения type из структуры
PyMethodDefmeth.Дескрипторы методов предоставляют C-функции как методы типа. Это тот же вид дескрипторов, который создаётся для записей в
tp_methods, и в Python он представляется объектомtypes.MethodDescriptorType.При успешном выполнении возвращает сильную ссылку на дескриптор. В случае ошибки возвращает
NULLс установленным исключением.
-
PyTypeObject PyMethodDescr_Type¶
- Часть Stable ABI.
Объект типа для объектов дескрипторов методов, созданных из структур
PyMethodDef. Эти дескрипторы предоставляют C-функции как методы типа и соответствуют объектамtypes.MethodDescriptorTypeв Python.
-
struct wrapperbase¶
Описывает обёртку слота (slot wrapper), используемую
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¶
- Часть Stable ABI.
Объект типа для объектов дескрипторов-обёрток, создаваемых
PyDescr_NewWrapper()иPyWrapper_New(). Дескрипторы-обёртки используются внутри для предоставления специальных методов, реализованных через структуры-обёртки, и в Python представляются объектамиtypes.WrapperDescriptorType.
-
PyObject *PyDescr_NewClassMethod(PyTypeObject *type, PyMethodDef *method)¶
- Возвращаемое значение: новая ссылка. Часть Stable 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)¶
- Возвращаемое значение: новая ссылка. Часть Stable ABI.
Создаёт новый связанный объект-обёртку из дескриптора-обёртки d и экземпляра self.
Это связанная форма дескриптора-обёртки, создаваемого функцией
PyDescr_NewWrapper(). CPython создаёт такие объекты, когда к слотовой обёртке обращаются через экземпляр; в Python они представлены объектамиtypes.MethodWrapperType.В случае успеха возвращает сильную ссылку на объект-обёртку. При неудаче возвращает
NULLс установленным исключением.
-
PyDescr_COMMON¶
Это макрос, содержащий общие поля объекта-дескриптора.
Это было включено в C API Python по ошибке; не используйте это в расширениях. Для создания пользовательских объектов-дескрипторов создайте класс, реализующий протокол дескрипторов (
tp_descr_getиtp_descr_set).Условно устарело с версии 3.15.
Встроенные дескрипторы¶Built-in descriptors
-
PyTypeObject PyProperty_Type¶
- Часть Stable ABI.
Объект типа для объектов свойств. Это тот же объект, что и
propertyв слое Python.
-
PyTypeObject PySuper_Type¶
- Часть Stable ABI.
Объект типа для объектов super. Это тот же объект, что и
superв слое Python.
-
PyTypeObject PyClassMethod_Type¶
Тип объектов методов класса. Это тот же объект, что и
classmethodв слое Python.
-
PyTypeObject PyClassMethodDescr_Type¶
- Часть Stable ABI.
Объект типа для дескрипторов методов класса на уровне C. Это тип дескрипторов, создаваемых для
classmethod(), определённых в типах расширений на C, и соответствует объектамtypes.ClassMethodDescriptorTypeв Python.
-
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с установленным исключением.