Python中的數據描述符(Data Descriptor)可以控制對類成員屬性的訪問方式,可以用于實現對數據的限制和驗證,也可以用于實現計算屬性。
一個數據描述符需要實現__get__、__set__、__delete__三個方法中的至少一個,這些方法在類被訪問時會被調用。其中__get__方法用于獲取屬性值,__set__方法用于設置屬性值,__delete__方法用于刪除屬性值。
一個基本的數據描述符實現如下:
class Descriptor: def __get__(self, instance, owner): pass def __set__(self, instance, value): pass def __delete__(self, instance): pass
其中,__get__方法中的instance參數是類的實例,owner參數是類本身,__set__方法中的value參數是要設置的屬性值。
下面是一個使用數據描述符實現計算屬性的示例:
class Rectangle: def __init__(self, width, height): self._width = width self._height = height @property def width(self): return self._width @property def height(self): return self._height class Area: def __get__(self, instance, owner): return instance.width * instance.height area = Area()
在上面的例子中,通過定義一個Area數據描述符來計算實例的面積,可以直接通過實例.area訪問屬性獲取計算結果。