Python 黑魔法 --- 描述器(descriptor)
Python 黑魔法—描述器(descriptor)
Python黑魔法,前面已经介绍了两个魔法,装饰器和迭代器,通常还有个生成器。生成器固然也是一个很优雅的魔法。生成器更像是函数的行为。而连接类行为和函数行为的时候,还有一个描述器魔法,也称之为描述符。
我们不止一次说过,Python的优雅,很大程度在于如何设计成优雅的API。黑魔法则是一大利器。或者说Python的优雅很大程度上是建立在这些魔法巧技基础上。
何谓描述器
当定义迭代器的时候,描述是实现迭代协议的对象,即实现__iter__
方法的对象。同理,所谓描述器,即实现了描述符协议,即__get__
, __set__
, 和 __delete__
方法的对象。
单看定义,还是比较抽象的。talk is cheap。看代码吧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
class WebFramework(object): def __init__(self, name='Flask'): self.name = name def __get__(self, instance, owner): |
Python 黑魔法 --- 描述器(descriptor)相关推荐
- python描述器descriptor_Python 黑魔法 --- 描述器(descriptor)
Python 黑魔法---描述器(descriptor) Python黑魔法,前面已经介绍了两个魔法,装饰器和迭代器,通常还有个生成器.生成器固然也是一个很优雅的魔法.生成器更像是函数的行为.而连接类 ...
- python描述器descriptor_python装饰器decorator、描述器descriptor
背景 image.png 装饰器decorator 返回值为另一函数的函数,通常使用 @wrapper语法. 装饰器的常见例子包括 装饰器语法只是一种语法快捷方式,以下两个函数定义在语义上完全等价: ...
- 描述器(descriptor)
环境 mac osx, python3.5 概述 定义描述器(descriptor),总结协议,展示描述器的调用,研究一个自定义的描述器,以及内置的python描述器,包括:函数,属性(propert ...
- python 描述器 详解_Python描述器descriptor详解
前面说了descriptor,这个东西其实和Java的setter,getter有点像.但这个descriptor和上文中我们开始提到的函数方法这些东西有什么关系呢? 所有的函数都可以是descrip ...
- python 描述器 详解_深入解析Python中的descriptor描述器的作用及用法
一般来说,一个描述器是一个有"绑定行为"的对象属性(object attribute),它的访问控制被描述器协议方法重写.这些方法是 __get__(), __set__(), 和 ...
- python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解
2019独角兽企业重金招聘Python工程师标准>>> 1.前言 Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过 ...
- python描述器做权限控制_Python装饰器14-描述器
描述器 这是Python一个重要的概念,英文名:Descriptor descriptor是对象的一个属性,只不过它存在于类的dict中并且有特殊方法get(可能还有set和__delete)而具有一 ...
- python 描述器_python 描述器
描述符: descriptor 前情要点 调用实例对象属性时,obj.__getattribute__ 方法会首先拦截调用, __getattribute__ 会先从obj中找属性,然后到cls找属性 ...
- python描述器深度解析
写在篇前 在之前的博客Python面向对象.魔法方法中曾简单提到魔法方法__get__.__set__.__delete__,但只给出一个例子,这篇文章将对它做一个更详细的总结,因为这三个魔法函数 ...
最新文章
- Jetty Cross Origin Filter解决jQuery Ajax跨域访问的方法
- 【python图像处理】txt文件数据的读取与写入
- 不要在覆写的方法中用super
- UBoot讲解和实践-------------讲解(二)
- 发布订阅之direct
- 微软面向初学者的机器学习课程:1.3-机器学习中的公平性
- 从文本分类问题中的特征词选择算法追踪如何将数学知识,数学理论迁移到实际工程中去...
- jdbc c3p0 mysql_JDBC + MySQL使用c3p0连接池
- 成员函数指针与高性能的C++委托(上篇)
- navicate使用小技巧
- 北航计算机2014复试上机题,北航计算机系考研复试上机真题及答
- 从其它系统登录到SharePoint 2010系统的单点登录
- C语言-数组练习题(附答案)
- 计算机视觉教程2-2:详解图像滤波算法(附Python实战)
- 嵌入式ERPC框架正式发布了
- 程序员最不想让你知道的尴尬瞬间,看完我眼睛都绿了
- Ubuntu——安装smplayer视频播放器
- matlab站点插值格点,基于xarray的气象场站点和格点插值
- Javascript 在循环中使用Promise对象
- 链路聚合技术及其配置
热门文章
- 一个快速、高效的Levenshtein算法实现
- MQTT client id重复导致连接失败
- Java入门学习笔记[狂神说Java]
- 计算机考研学长学什么,研究生学长浅谈考研心得
- python panda读取csv_python pandas 中文件的读写——read_csv()读取文件
- 用ANSYS画矩形_用SolidWorks画一个换挡杆防尘罩,此图建了10个基准面,颇为麻烦...
- 开发板通过NTS挂载在PC机中的文件夹
- mysql写法_MySQL基本语句写法
- android studio资产目录,在Android Studio中设置单元测试的自定义资产目录
- 常用start_Excel VBA 基础(02.7) - 常用函数 第二部分