描述符
描述符允许自定义在引用一个对象的属性时应该完成的事情。它是一个类,定义了另一个类的属性的访问方式。换句话说,一个类可以将属性管理委托给另一个类。
描述符类基于3个特殊方法,这3个方法组成了描述符协议(descriptor protocol):
- __set__(self, obj, type=None):在设置属性时将调用这一方法。在下面的示例中,我们将其称为setter。
- __get__(self, obj, value):在读取属性时将调用这一方法(被称为getter)。
- __delete__(self, obj):对属性调用del时将调用这一方法。
实现了__get__()和__set__()的描述符被称为数据描述符(data descriptor)。
如果只实现了__get__(),那么就被称为非数据描述符(non-data descriptor)。
代码实例
class RevealAccess(object):
"""一个数据描述符,正常设定值并返回值,同时打印出记录访问的信息。"""
def __init__(self, initval=None, name='var'):
self.val = initval
self.name = name
def __get__(self