3

我正在查看 types.py 以了解内置类型,并且遇到了这个 GetSetDescriptorType。从Python 文档

types.GetSetDescriptorType

使用 PyGetSetDef 在扩展模块中定义的对象类型,例如 FrameType.f_locals 或 array.array.typecode。该类型用作对象属性的描述符;它与属性类型具有相同的目的,但用于扩展模块中定义的类

我确实了解财产类型,但无法解决这个问题。了解这一点的人可以提出一些启示吗?

4

1 回答 1

2

当您使用 C 编写 Python 模块时,您使用 C API 定义新类型。这个 API 有很多函数和结构来指定新类型的所有行为。

使用 C API 指定类型属性的一种方法是定义PyGetSetDef结构数组:

static PyGetSetDef my_props[] = { /*... */ }

然后在类型的初始化中使用数组(详见这个例子)。

然后,在 Python 中,当您使用时,MyType.my_property您有一个值types.GetSetDescriptorType,用于在您编写时解析属性的实际值my_obj.my_property

因此,这种类型是一个实现细节,不太可能非常有用。

于 2013-02-02T09:30:24.270 回答