Python简单描述符
示例
有两种不同类型的描述符。数据描述符定义为同时定义__get__()和__set__()方法的对象,而非数据描述符仅定义__get__()方法。在考虑实例的字典的重写和名称空间时,这一区别很重要。如果数据描述符和实例字典中的条目共享相同的名称,则该数据描述符将优先。但是,如果非数据描述符和实例字典中的条目共享相同的名称,则实例字典的条目将优先。
要创建只读数据描述符,请同时定义get()和set(),并在调用set()时引发AttributeError。用引发异常的占位符定义set()方法足以使其成为数据描述符。
descr.__get__(self, obj, type=None) --> value descr.__set__(self, obj, value) --> None descr.__delete__(self, obj) --> None
一个实现的例子:
class DescPrinter(object): """记录活动的数据描述符。""" _val = 7 def __get__(self, obj, objtype=None): print('Getting ...') return self._val def __set__(self, obj, val): print('Setting', val) self._val= val def __delete__(self, obj): print('Deleting ...') del self._val class Foo(): x = DescPrinter() i = Foo() i.x #得到... #7 i.x = 100 #设定100 i.x #得到... #100 del i.x #删除中... i.x #得到... #7