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