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

Объекты дескрипторовDescriptor Objects

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

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

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

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

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

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

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

Дескрипторы элементов предоставляют поля 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 из структуры PyMethodDef meth.

Дескрипторы методов предоставляют 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 из структуры wrapperbase base и указателя на обёрнутую функцию слота 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 из структуры 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)
Возвращаемое значение: новая ссылка. Часть 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 с установленным исключением.