描述器对象

“描述器”是描述对象的某些属性的对象。它们存在于类型对象的字典中。

PyObject *PyDescr_NewGetSet(PyTypeObject *type, struct PyGetSetDef *getset)
返回值:新的引用。 属于 稳定 ABI.

Create a new get-set descriptor for extension type type from the PyGetSetDef structure getset.

Get-set descriptors expose attributes implemented by C getter and setter functions rather than stored directly in the instance. This is the same kind of descriptor created for entries in tp_getset, and it appears in Python as a types.GetSetDescriptorType object.

On success, return a strong reference to the descriptor. Return NULL with an exception set on failure.

PyObject *PyDescr_NewMember(PyTypeObject *type, struct PyMemberDef *member)
返回值:新的引用。 属于 稳定 ABI.

Create a new member descriptor for extension type type from the PyMemberDef structure member.

Member descriptors expose fields in the type's C struct as Python attributes. This is the same kind of descriptor created for entries in tp_members, and it appears in Python as a types.MemberDescriptorType object.

On success, return a strong reference to the descriptor. Return NULL with an exception set on failure.

PyTypeObject PyMemberDescr_Type
属于 稳定 ABI.

基于 PyMemberDef 结构体创建的成员描述器对象的类型对象。这种描述器将 C 结构的字段暴露为类型的属性,对应 Python 中的 types.MemberDescriptorType 对象。

PyTypeObject PyGetSetDescr_Type
属于 稳定 ABI.

The type object for get/set descriptor objects created from PyGetSetDef structures. These descriptors implement attributes whose value is computed by C getter and setter functions, and are used for many built-in type attributes. They correspond to types.GetSetDescriptorType objects in Python.

PyObject *PyDescr_NewMethod(PyTypeObject *type, struct PyMethodDef *meth)
返回值:新的引用。 属于 稳定 ABI.

Create a new method descriptor for extension type type from the PyMethodDef structure meth.

Method descriptors expose C functions as methods on a type. This is the same kind of descriptor created for entries in tp_methods, and it appears in Python as a types.MethodDescriptorType object.

On success, return a strong reference to the descriptor. Return NULL with an exception set on failure.

PyTypeObject PyMethodDescr_Type
属于 稳定 ABI.

The type object for method descriptor objects created from PyMethodDef structures. These descriptors expose C functions as methods on a type, and correspond to types.MethodDescriptorType objects in Python.

struct wrapperbase

Describes a slot wrapper used by PyDescr_NewWrapper().

Each wrapperbase record stores the Python-visible name and metadata for a special method implemented by a type slot, together with the wrapper function used to adapt that slot to Python's calling convention.

PyObject *PyDescr_NewWrapper(PyTypeObject *type, struct wrapperbase *base, void *wrapped)
返回值:新的引用。

Create a new wrapper descriptor for extension type type from the wrapperbase structure base and the wrapped slot function pointer wrapped.

Wrapper descriptors expose special methods implemented by type slots. This is the same kind of descriptor that CPython creates for slot-based special methods such as __repr__ or __add__, and it appears in Python as a types.WrapperDescriptorType object.

On success, return a strong reference to the descriptor. Return NULL with an exception set on failure.

PyTypeObject PyWrapperDescr_Type
属于 稳定 ABI.

PyDescr_NewWrapper()PyWrapper_New() 创建的包装器描述器对象的类型对象。 包装器描述器在内部被用于暴露通过包装器结构体实现的特殊方法,对应 Python 中的 types.WrapperDescriptorType 对象。

PyObject *PyDescr_NewClassMethod(PyTypeObject *type, PyMethodDef *method)
返回值:新的引用。 属于 稳定 ABI.

Create a new class method descriptor for extension type type from the PyMethodDef structure method.

Class method descriptors expose C methods that receive the class rather than an instance when accessed. This is the same kind of descriptor created for METH_CLASS entries in tp_methods, and it appears in Python as a types.ClassMethodDescriptorType object.

On success, return a strong reference to the descriptor. Return NULL with an exception set on failure.

int PyDescr_IsData(PyObject *descr)

如果描述器对象 descr 描述的是一个数据属性则返回非零值,或者如果它描述的是一个方法则返回 0descr 必须是一个描述器对象;不会进行错误检查。

PyObject *PyWrapper_New(PyObject *d, PyObject *self)
返回值:新的引用。 属于 稳定 ABI.

Create a new bound wrapper object from the wrapper descriptor d and the instance self.

This is the bound form of a wrapper descriptor created by PyDescr_NewWrapper(). CPython creates these objects when a slot wrapper is accessed through an instance, and they appear in Python as types.MethodWrapperType objects.

On success, return a strong reference to the wrapper object. Return NULL with an exception set on failure.

PyDescr_COMMON

This is a soft deprecated macro including the common fields for a descriptor object.

This was included in Python's C API by mistake; do not use it in extensions. For creating custom descriptor objects, create a class implementing the descriptor protocol (tp_descr_get and tp_descr_set).

内置描述器

PyTypeObject PyProperty_Type
属于 稳定 ABI.

The type object for property objects. This is the same object as property in the Python layer.

PyTypeObject PySuper_Type
属于 稳定 ABI.

super 对象的类型对象。它与 Python 层面的 super 是相同的对象。

PyTypeObject PyClassMethod_Type

类方法对象的类型。它与 Python 层面的 classmethod 是相同的对象。

PyTypeObject PyClassMethodDescr_Type
属于 稳定 ABI.

The type object for C-level class method descriptor objects. This is the type of the descriptors created for classmethod() defined in C extension types, and corresponds to types.ClassMethodDescriptorType objects in Python.

PyObject *PyClassMethod_New(PyObject *callable)

新建一个包裹 callableclassmethod 对象。callable 必须是一个可调用对象,并且不可为 NULL 值。

成功时,此函数将返回一个指向新类方法描述器的 strong reference。失败时,此函数将返回 NULL 并设置一个异常。

PyTypeObject PyStaticMethod_Type

静态方法对象的类型。它与 Python 层面的 staticmethod 是相同的对象。

PyObject *PyStaticMethod_New(PyObject *callable)

新建一个包裹 callablestaticmethod 对象。callable 必须是一个可调用对象,并且不可为 NULL 值。

成功时,此函数将返回一个指向新静态方法描述器的 strong reference。失败时,此函数将返回 NULL 并设置一个异常。