描述符和虛線查詢

描述符是(通常)類的屬性並且具有 __get____set____delete__ 特殊方法的任何物件。

資料描述符包含 __set____delete__ 中的任何一個

這些可以控制例項上的虛線查詢,並用於實現函式 staticmethodclassmethodproperty。點查詢(例如,類 Foo 查詢屬性 bar 的例項 foo - 即 foo.bar)使用以下演算法:

  1. Foo 在課堂上被擡起來了。如果它在那裡並且它是資料描述符,則使用資料描述符。這就是 property 如何能夠控制對例項中資料的訪問,而例項無法覆蓋它。如果沒有資料描述符那麼

  2. 在例項 __dict__ 中查詢了 bar。這就是我們可以使用虛線查詢覆蓋或阻止從例項呼叫的方法的原因。如果例項中存在 bar,則使用它。如果沒有,我們那麼

  3. 在課堂上看看 Foo for bar。如果它是描述符,則使用描述符協議。這是函式(在此上下文中,未繫結方法),classmethodstaticmethod 的實現方式。否則它只是返回那裡的物件,或者有一個 AttributeError