2013-02-02 37 views
2

我在看types.py來理解內置類型,並且我遇到了這個GetSetDescriptorType。從Python documentation什麼是Python中的GetSetDescriptorType?

types.GetSetDescriptorType

在擴展模塊定義與PyGetSetDef的對象的類型, 如FrameType.f_locals或array.array.typecode。這種類型使用 作爲對象屬性的描述符;它具有相同的目的 物業類型,但對於班擴展模塊

我明白屬性類型定義,但不能換我的腦海裏解決這個問題。能理解這一點的人可以拋出一些光嗎?

回答

2

當您使用C編寫Python模塊時,您可以使用C API定義新類型。這個API有很多功能和結構來指定新類型的所有行爲。指定使用C API的類型的屬性

的一種方式是定義的PyGetSetDef結構的陣列:

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

然後使用陣列中的類型的初始化(見this example細節)。

然後,在Python中,當您使用MyType.my_property時,您的值爲types.GetSetDescriptorType,用於在編寫my_obj.my_property時解析屬性的實際值。

因此,這種類型是一個實現細節,不太可能是非常有用的。