在Python中,描述符是一種具有特殊方法的類,用于封裝和控制對類屬性的訪問。描述符的主要方法有__get__()、__set__()和__delete__()。下面是一個簡單的描述符示例,展示了如何進行數據封裝:
class Descriptor:
def __init__(self, default=None):
self.default = default
self._value = default
def __get__(self, instance, owner):
if instance is None:
return self
return self._value
def __set__(self, instance, value):
if value < 0:
raise ValueError("Value must be non-negative")
self._value = value
def __delete__(self, instance):
del self._value
class MyClass:
attr = Descriptor(default=0)
# 創建類的實例
obj = MyClass()
# 訪問屬性
print(obj.attr) # 輸出: 0
# 修改屬性值
obj.attr = 5
print(obj.attr) # 輸出: 5
# 嘗試設置負值(將引發ValueError)
obj.attr = -1
# 刪除屬性
del obj.attr
在這個例子中,我們創建了一個名為Descriptor的描述符類,它具有__get__()、__set__()和__delete__()方法。__get__()方法用于獲取屬性值,__set__()方法用于設置屬性值,而__delete__()方法用于刪除屬性。我們還定義了一個名為MyClass的類,其中包含一個名為attr的屬性,該屬性使用Descriptor類進行封裝。
當我們訪問obj.attr時,__get__()方法被調用,返回默認值0。當我們修改obj.attr的值時,__set__()方法被調用,我們可以在這個方法中添加一些邏輯來控制屬性值的設置。如果我們嘗試設置一個負值,將會引發一個ValueError。最后,我們可以使用del語句刪除屬性。