通過例項解析python描述符原理作用
阿新 • • 發佈:2020-01-24
這篇文章主要介紹了通過例項解析python描述符原理作用,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
本質上看,描述符是一個類,只不過它定義了另一個類中屬性的訪問方式。換句話說,一個類可以將屬性管理全權委託給描述符類。
描述符類基於以下三種特殊方法,換句話說,這三種方法組成了描述符協議:
- __set__(self,obj,type = None): 在設定屬性時,將呼叫這一方法。
- __get__(self,value): 在讀取屬性時將呼叫這一方法。
- __delete__(self,obj): 對屬性呼叫del時將呼叫這一方法。
其中,實現了setter和getter方法的描述符被稱為資料描述符,反之,如果只實現了getter方法,則稱為非資料描述符。
#描述符類 class revealAccess: def __init__(self,initval = None,name = 'var'): self.val = initval self.name = name def __get__(self,objtype): print("Retrieving",self.name) return self.val def __set__(self,val): print("updating",self.name) self.val = val class myClass: x = revelAccess(10,'var "x"') y = 5 m = myClass() print(m.x) m.x = 20 print(m.x) print(m.y)
Retrieving var "x" 10 updating var "x" Retrieving var "x" 20 5
如果一個類的某個屬性有資料描述符,那麼每次查詢這個屬性時,都會呼叫描述符的__get__()方法,並返回它的值;同樣,每次在對屬性賦值時,也會呼叫__set__()方法。
當每次使用del類物件.屬性(或者delattr(類物件,屬性))語句時,都會呼叫該方法。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。