python __get__描述器

python中只有元類的__getattr__方法纔會執行以下代碼:

def __getattribute__(self, key):
    "Emulate type_getattro() in Objects/typeobject.c"
    v = object.__getattribute__(self, key)
    if hasattr(v, '__get__'):
        return v.__get__(None, self)
    return v

以上是模擬type的__getattr__方法。所有元類都繼承自type,也就是所有類對象都擁有type的獲取屬性的方法機制,所以,類對象__get__方法會生效,當一個對象作爲type對象的也就是類對象的屬性時,這個對象的__get__方法纔會被執行,否則將不會被執行。

也就是type對象--類對象在訪問它的屬性時,如果它的屬性擁有__get__方法,則會被執行,沒有則不執行。

__get__方法會傳入兩個參數,一個就是訪問它的實例對象,沒有就是None,另一個就是該實例對應的類對象,沒有就爲None。

我們根據這兩個參數就可以知道是誰在訪問它--這個擁有__get__屬性的對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章