Python 2.2 引進了 Python 描述項,同時還引進了一些新的樣式類,但是它們並沒有得到廣泛使用。 Python 描述項是一種創建託管屬性的方法。 除了其他優點外,託管屬性還用於保護屬性不受修改,或HTTP://www.aliyun.com/zixun/aggregation/18862.html">自動更新某個依賴屬性的值。
描述項增加了對 Python 的理解,改善了編碼技能。 本文介紹了描述項協定,並演示了如何創建和使用描述項。
描述項協定
Python 描述項協定 只是一種在模型中引用屬性時指定將要發生事件的方法。 它允許程式設計人員輕鬆、有效地管理屬性訪問:
set get delete
在其他程式設計語言中,描述項被稱作 setter 和 getter,而公共函數用於獲得 (Get) 和設置 (Set) 一個私有變數。 Python 沒有私有變數的概念,而描述項協定可以作為一種 Python 的方式來實現與私有變數類似的功能。
總的來說,描述項就是一個具有綁定行為的物件屬性,其屬性訪問將由描述項協定中的方法覆蓋。 這些方法為 __get__、__set__ 和 __delete__。 如果這些方法中的任何一個針對某個物件定義,那麼它就被認為是一個描述項。 通過 清單 1 進一步瞭解這些方法。
清單 1. 描述項方法
__get__(self, instance, owner)__set__(self, instance, value)__delete__(self, instance)
其中:
__get__ 用於訪問屬性。 它返回屬性的值,或者在所請求的屬性不存在的情況下出現 AttributeError 異常。
__set__ 將在屬性分配操作中調用。 不會返回任何內容。
__delete__ 控制刪除操作。 不會返回內容。
需要注意,描述項被分配給一個類,而不是實例。 修改此類,會覆蓋或刪除描述項本身,而不是觸發它的代碼。
需要使用描述項的情況
考慮 email 屬性。 在向該屬性分配值之前,需要對郵件格式進行檢驗。 該描述項允許通過一個正則運算式處理電子郵件,然後對格式進行檢驗後將它分配給一個屬性。
在其他許多情況下,Python 協定描述項控制對屬性的訪問,如保護 name 屬性。
創建描述項
您可以通過許多方式創建描述項:
創建一個類並覆蓋任意一個描述項方法:__set__、__ get__ 和 __delete__。 當需要某個描述項跨多個不同的類和屬性,例如類型驗證,則使用該方法。 使用屬性類型,這種方法可以更加簡單、靈活地創建描述項。 使用屬性描述項,它結合了屬性類型方法和 Python 描述項。
以下示例在其操作方面均相似。 不同之處在于實現方法。