您的位置:首页 > 编程语言 > Python开发

Python描述器

2015-06-22 15:42 741 查看
在python中一个描述器就是定义下面的方法中一个或多个的一个对象:

__get__(self, instance, owner)t
__set__(self, instance, value)
__delete__(self, instance)


如果一个对象同时定义了
__get__()
__set__()
,它叫做资料描述器。只定义了
__get__()
的描述器叫做非资料描述器(一般用于方法)。 资料描述器和非资料描述器的区别在于:相对于实例字典的优先级。如果实例字典中有与资料描述器同名的属性,优先使用资料描述器中的;如果实例字典中有与非资料描述器中同名的属性,优先使用实例字典中的。即优先级 资料描述器 > 实例字典 > 非资料描述器。

要想写一个只读的资料描述器,只需同时定义
__get__()
__set__()
并在
__set__()
中抛出一个
AttributeError


描述器的调用

描述器可以直接这么调用:
descriptor.__get__(obj)
,不过一般都是用来拦截对实例属性的访问。

描述器的调用规则如下:

__get__(self, instance, owner)


obj.descriptor         will call descriptor.__get__(obj. OwnerClass)
OwnerClass.descriptor  will call  descriptor.__get__(None, OwnerClass)


__set__(self, instance, value)


obj.descriptor = 5     will call  descriptor.__set__(obj, 5)


__delete__(self, instance)


del obj.descriptor     will call  descriptor.__delete__(obj)

参考资料:

Python Gossip: 描述器

Python描述器引导

Descriptor HowTo Guide

Python descriptor

Python FAQ: Descriptors
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: