首页 存档 技术 查看内容

Python官方文档:Descriptor指南

2018-3-30 13:00 |来自: 互联网 290 0

摘要: (点击上方公号,可快速关注) 摘要 定义Descriptor并概述其协议,以及展示如何调用Descriptor。深入学习自定义Descriptor和几个内置的Python Descriptor,包括函数、property、静态方法和类方法。通过纯Python代码 ...

(点击上方公号,可快速关注)


摘要

定义Descriptor并概述其协议,以及展示如何调用Descriptor。深入学习自定义Descriptor和几个内置的Python Descriptor,包括函数、property、静态方法和类方法。通过纯Python代码等价实现和应用示例来揭示其运行原理。

学习Descriptor不仅可以获得更多的工具集,而且可以更好地体会Python的运行原理及其优雅的设计。

定义和介绍

一般来说,Descriptor是伴随有“绑定行为”的对象属性,其属性访问可以根据Descriptor协议通过方法来控制。方法有__get__()、__set__()和__delete__()。如果在对象中定义了其中任意方法,那么这个对象就称为Descriptor。

对象中属性访问的默认行为就是在对象的字典中get、set或delete相应的属性。例如,a.x的查找顺序是从 a.__dict__['x'] 到 type(a).__dict__['x'],然后继续在type(a)除元类(metaclass)外的基类中查找。如果要查找的值是定义了任意Descriptor方法的对象,那么Python会调用Descriptor方法来覆盖默认行为。查找的优先级顺序取决于定义了哪些Descriptor方法。

Descriptor是一个强大而通用的协议,是property、方法、静态方法、类方法和super()背后的机制。在Python的内部使用Descriptor来实现了2.2版本中引入的新风格类。Descriptor抽象了底层的c代码,为Python日常编码提供了一个灵活的新工具集。

Descriptor协议

descr.__get__(self, obj, type=None) --

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部