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)相关推荐

  1. python描述器descriptor_Python 黑魔法 --- 描述器(descriptor)

    Python 黑魔法---描述器(descriptor) Python黑魔法,前面已经介绍了两个魔法,装饰器和迭代器,通常还有个生成器.生成器固然也是一个很优雅的魔法.生成器更像是函数的行为.而连接类 ...

  2. python描述器descriptor_python装饰器decorator、描述器descriptor

    背景 image.png 装饰器decorator 返回值为另一函数的函数,通常使用 @wrapper语法. 装饰器的常见例子包括 装饰器语法只是一种语法快捷方式,以下两个函数定义在语义上完全等价: ...

  3. 描述器(descriptor)

    环境 mac osx, python3.5 概述 定义描述器(descriptor),总结协议,展示描述器的调用,研究一个自定义的描述器,以及内置的python描述器,包括:函数,属性(propert ...

  4. python 描述器 详解_Python描述器descriptor详解

    前面说了descriptor,这个东西其实和Java的setter,getter有点像.但这个descriptor和上文中我们开始提到的函数方法这些东西有什么关系呢? 所有的函数都可以是descrip ...

  5. python 描述器 详解_深入解析Python中的descriptor描述器的作用及用法

    一般来说,一个描述器是一个有"绑定行为"的对象属性(object attribute),它的访问控制被描述器协议方法重写.这些方法是 __get__(), __set__(), 和 ...

  6. python描述符(descriptor)、属性(property)、函数(类)装饰器(decorator )原理实例详解

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过 ...

  7. python描述器做权限控制_Python装饰器14-描述器

    描述器 这是Python一个重要的概念,英文名:Descriptor descriptor是对象的一个属性,只不过它存在于类的dict中并且有特殊方法get(可能还有set和__delete)而具有一 ...

  8. python 描述器_python 描述器

    描述符: descriptor 前情要点 调用实例对象属性时,obj.__getattribute__ 方法会首先拦截调用, __getattribute__ 会先从obj中找属性,然后到cls找属性 ...

  9. python描述器深度解析

    写在篇前   在之前的博客Python面向对象.魔法方法中曾简单提到魔法方法__get__.__set__.__delete__,但只给出一个例子,这篇文章将对它做一个更详细的总结,因为这三个魔法函数 ...

最新文章

  1. Jetty Cross Origin Filter解决jQuery Ajax跨域访问的方法
  2. 【python图像处理】txt文件数据的读取与写入
  3. 不要在覆写的方法中用super
  4. UBoot讲解和实践-------------讲解(二)
  5. 发布订阅之direct
  6. 微软面向初学者的机器学习课程:1.3-机器学习中的公平性
  7. 从文本分类问题中的特征词选择算法追踪如何将数学知识,数学理论迁移到实际工程中去...
  8. jdbc c3p0 mysql_JDBC + MySQL使用c3p0连接池
  9. 成员函数指针与高性能的C++委托(上篇)
  10. navicate使用小技巧
  11. 北航计算机2014复试上机题,北航计算机系考研复试上机真题及答
  12. 从其它系统登录到SharePoint 2010系统的单点登录
  13. C语言-数组练习题(附答案)
  14. 计算机视觉教程2-2:详解图像滤波算法(附Python实战)
  15. 嵌入式ERPC框架正式发布了
  16. 程序员最不想让你知道的尴尬瞬间,看完我眼睛都绿了
  17. Ubuntu——安装smplayer视频播放器
  18. matlab站点插值格点,基于xarray的气象场站点和格点插值
  19. Javascript 在循环中使用Promise对象
  20. 链路聚合技术及其配置

热门文章

  1. 一个快速、高效的Levenshtein算法实现
  2. MQTT client id重复导致连接失败
  3. Java入门学习笔记[狂神说Java]
  4. 计算机考研学长学什么,研究生学长浅谈考研心得
  5. python panda读取csv_python pandas 中文件的读写——read_csv()读取文件
  6. 用ANSYS画矩形_用SolidWorks画一个换挡杆防尘罩,此图建了10个基准面,颇为麻烦...
  7. 开发板通过NTS挂载在PC机中的文件夹
  8. mysql写法_MySQL基本语句写法
  9. android studio资产目录,在Android Studio中设置单元测试的自定义资产目录
  10. 常用start_Excel VBA 基础(02.7) - 常用函数 第二部分