在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
语句删除属性。