我正在查看 types.py 以了解内置类型,并且遇到了这个 GetSetDescriptorType。从Python 文档:
types.GetSetDescriptorType
使用 PyGetSetDef 在扩展模块中定义的对象类型,例如 FrameType.f_locals 或 array.array.typecode。该类型用作对象属性的描述符;它与属性类型具有相同的目的,但用于扩展模块中定义的类
我确实了解财产类型,但无法解决这个问题。了解这一点的人可以提出一些启示吗?
当您使用 C 编写 Python 模块时,您使用 C API 定义新类型。这个 API 有很多函数和结构来指定新类型的所有行为。
使用 C API 指定类型属性的一种方法是定义PyGetSetDef
结构数组:
static PyGetSetDef my_props[] = { /*... */ }
然后在类型的初始化中使用数组(详见这个例子)。
然后,在 Python 中,当您使用时,MyType.my_property
您有一个值types.GetSetDescriptorType
,用于在您编写时解析属性的实际值my_obj.my_property
。
因此,这种类型是一个实现细节,不太可能非常有用。