1. 程式人生 > 程式設計 >通過例項解析python描述符原理作用

通過例項解析python描述符原理作用

這篇文章主要介紹了通過例項解析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(類物件,屬性))語句時,都會呼叫該方法。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。