在Python中,通过使用描述符,程序员可以在引用对象属性时定制要完成的工作,接下来我们一起来聊聊Python描述符相关的知识。

本质上,描述符是一个类,但它定义了另一个类中属性的访问模式。换句话说,一个类可以将属性管理全权委托给描述符类。

描述符是Python中复杂属性访问的基础,用于实现property、方法、类方法、静态方法和super类型。

描述符基于以下三种特殊方法。换句话说,这三种方法构成了描述符协议:

l set(self,obj,type=None):在设置属性时调用该方法(setteretter表示);

l get(self,obj,value):在读取属性时调用此方法(getter表示本节);

l delete(self,obj):当属性调用del时,该方法将被调用。

其中,实现setter和getter方法的描述符类称为数据描述符;相反,如果只实现getter方法,则称为非数据描述符。

事实上,在每次查找属性时,描述符协议中的方法都是由类对象的特殊方法__getattribute_()调用(注意不要与__getattr_()混淆)。也就是说,每次使用类对象、属性(或getattr(类对象、属性值)的调用方式时,都会隐式调用__getattribute__(),它会按照以下顺序找到属性:

(1) 验证属性是否是类实例对象的数据描述符;

(2) 如果没有,检查该属性是否可以在类实例对象的__dict__中找到;

(3) 最后,检查属性是否是类实例对象的非数据描述符。

这里我们用一个例子,希望让你能有更清楚的了解:

运行结果:

从这个例子可以看出,如果一个类的某个属性有一个数据描述符,每次查找这个属性,都会调用描述符的_get__()方法,并返回其值;同样,每次给这个属性赋值,也会调用__set__()方法。

请注意,虽然上面的例子中没有使用__del__()方法,但是很容易理解。当您每次使用del类对象、属性(或delattr(类对象、属性)语句时,您将调用该方法。

其实,除了使用描述符类自定义类属性被调用时做的操作外,我们还可以使用property()函数或者@property装饰器,具体的是有方法,我会在后面的文章里介绍。
往期推荐文章:
Python自学真的可以学好嘛?
想轻松入门Python编程,必须看这10个经典案例,学完就能找到工作
Python学习:快速搭建python环境

Python描述符是什么?相关推荐

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

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

  2. python有哪些作用-python描述符有什么作用

    python描述符的作用:代理一个类的属性,让程序员在引用一个对象属性时自定义要完成的工作:它是实现大部分Python类特性中最底层的数据结构的实现手段,是使用到装饰器或者元类的大型框架中的一个非常重 ...

  3. python描述符详解_Python描述符 (descriptor) 详解

    1.什么是描述符? python描述符是一个"绑定行为"的对象属性,在描述符协议中,它可以通过方法重写属性的访问.这些方法有 __get__(), __set__(), 和__de ...

  4. python 描述符类_python的黑魔法--描述符

    python的黑魔法 描述符 官方定义:python描述符是一个"绑定行为"的对象属性,在描述符协议中,它可以通过方法重写属性的访问.这些方法有 get(), set(), 和de ...

  5. python 描述符有什么用_介绍python描述符的意义

    你也许经常会听到「描述符」这个概念,但是由于大多数的程序员很少会使用到他,所以可能你并不太清楚了解它的原理,python视频教程栏目将详细介绍 推荐(免费):python视频教程 但是如果你想自己的事 ...

  6. 技术图文:Python描述符 (descriptor) 详解

    背景 今天在B站上学习"零基础入门学习Python"这门课程的第46讲"魔法方法:描述符",这也是我们组织的 Python基础刻意练习活动 的学习任务,其中有这 ...

  7. python 描述符参考文档_python 描述符详解

    Python中包含了许多内建的语言特性,它们使得代码简洁且易于理解.这些特性包括列表/集合/字典推导式,属性(property).以及装饰器(decorator).对于大部分特性来说,这些" ...

  8. python描述符与实例属性_Python 中的属性访问与描述符

    在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言,点(. ...

  9. python描述符详解

    什么是描述符 数据描述符data descriptor和非数据描述符non-data descriptors 如何检测一个对象是不是描述符 描述符有什么用和好处 例子 总结 本文主要介绍描述符的定义, ...

最新文章

  1. 【推荐】ZendStudio 5.5.1 开发调试(Debug)配置说明
  2. 理解 Delphi 的类(十) - 深入方法[17] - 提前声明
  3. 全球44家机构,55位大佬,历时两年,打造最强NLG评测基准!
  4. 发布 128 核 Altra Max,自研内核,明年推出 5nm 处理器,“性能怪兽”Ampere 搞大事?
  5. Nginx部署静态页面及引用图片有效访问的两种方式
  6. java删不了_java – 为什么我不能删除项目?
  7. 网络编程-TCP/IP各层介绍(5层模型讲解)
  8. 研磨设计模式--抽象工厂模式
  9. linux虚拟磁带机管理,RHEL6 虚拟磁带机使用指南
  10. JTT808、JTT1078、TJSATL主动安全踩坑记录
  11. keep practicing for fast tying
  12. 转载-一种基于陀螺仪传感器的准确计步器算法
  13. 计算机教室标语6个字,教室常用标语
  14. MarkDown 分割线
  15. win10如何删除输入法_win10如何添加和删除输入法_win10系统添加和删除输入法的图文教程...
  16. pc端/web端/移动端
  17. 吉安计算机教师招聘,吉安教师招聘
  18. 存款准备金率,央行票据
  19. 【RDMA】基于RoCE v1配置PFC (非讲原理)
  20. 机器学习---之为什么要对数据进行归一化

热门文章

  1. 浏览器开发重要的参考博客
  2. python如何并发运行2个软件_如何利用并发性加速你的python程序(二):I/O 绑定程序加速...
  3. php html5 案例,35个非常好的HTML5+CSS3实例
  4. python中奖号_Python分析彩票记录并预测中奖号码过程详解
  5. maven怎么和ecli_Maven的配置和Eclipse中导入SpringBoot项目一些注意点
  6. Strust2的sx:datetimepicker限制日期选择
  7. modelsim10.1a安装破解说明
  8. php7 iis10 mysql_Windows Server 2019 IIS10.0+PHP(FastCGI)+MySQL环境搭建教程
  9. typora 分割线_实战 | 五分钟,使用Typora+PicGo提升百倍写作效率
  10. 计算机病毒怎么做图片解说,【虎子_游戏解说】计算机病毒防范的实施方法