描述符和虛線查詢
描述符是(通常)類的屬性並且具有 __get__,__set__ 或 __delete__ 特殊方法的任何物件。
資料描述符包含 __set__ 或 __delete__ 中的任何一個
這些可以控制例項上的虛線查詢,並用於實現函式 staticmethod,classmethod 和 property。點查詢(例如,類 Foo 查詢屬性 bar 的例項 foo - 即 foo.bar)使用以下演算法:
-
Foo在課堂上被擡起來了。如果它在那裡並且它是資料描述符,則使用資料描述符。這就是property如何能夠控制對例項中資料的訪問,而例項無法覆蓋它。如果沒有資料描述符那麼 -
在例項
__dict__中查詢了bar。這就是我們可以使用虛線查詢覆蓋或阻止從例項呼叫的方法的原因。如果例項中存在bar,則使用它。如果沒有,我們那麼 -
在課堂上看看
Fooforbar。如果它是描述符,則使用描述符協議。這是函式(在此上下文中,未繫結方法),classmethod和staticmethod的實現方式。否則它只是返回那裡的物件,或者有一個AttributeError