通过实例解析python描述符原理作用


Posted in Python onJanuary 22, 2020

这篇文章主要介绍了通过实例解析python描述符原理作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

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

  • __set__(self, obj, type = None): 在设置属性时,将调用这一方法。
  • __get__(self, obj, value): 在读取属性时将调用这一方法。
  • __delete__(self, obj): 对属性调用del时将调用这一方法。

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

#描述符类
class revealAccess:
  def __init__(self, initval = None, name = 'var'):
    self.val = initval
    self.name = name
  def __get__(self, obj, objtype):
    print("Retrieving", self.name)
    return self.val
  def __set__(self, obj, val):
    print("updating", self.name)
    self.val = val

class myClass:
  x = revelAccess(10, 'var "x"')
  y = 5
m = myClass()
print(m.x)
m.x = 20
print(m.x)
print(m.y)
Retrieving var "x"
10
updating var "x"
Retrieving var "x"
20
5

如果一个类的某个属性有数据描述符,那么每次查找这个属性时,都会调用描述符的__get__()方法,并返回它的值;同样,每次在对属性赋值时,也会调用__set__()方法。
当每次使用del类对象.属性(或者delattr(类对象,属性))语句时,都会调用该方法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中处理XML的教程
Apr 29 Python
Python3读取zip文件信息的方法
May 22 Python
Python实现的端口扫描功能示例
Apr 08 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 Python
python石头剪刀布小游戏(三局两胜制)
Jan 20 Python
python仿抖音表白神器
Apr 08 Python
Python中pymysql 模块的使用详解
Aug 12 Python
Python K最近邻从原理到实现的方法
Aug 15 Python
在keras里面实现计算f1-score的代码
Jun 15 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 07 Python
如何获取numpy array前N个最大值
May 14 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 Python
python基于property()函数定义属性
Jan 22 #Python
Python @property装饰器原理解析
Jan 22 #Python
Python底层封装实现方法详解
Jan 22 #Python
tensorboard实现同时显示训练曲线和测试曲线
Jan 21 #Python
使用tensorboard可视化loss和acc的实例
Jan 21 #Python
TensorFlow绘制loss/accuracy曲线的实例
Jan 21 #Python
NumPy统计函数的实现方法
Jan 21 #Python
You might like
PHP几个数学计算的内部函数学习整理
2011/08/06 PHP
php发送邮件的问题详解
2015/06/22 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
关于JS管理作用域的问题
2013/04/10 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
Bootstrap每天必学之滚动监听
2016/03/16 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
javascript类型系统_正则表达式RegExp类型详解
2016/06/24 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
addEventListener()与removeEventListener()解析
2017/04/20 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
Nodejs模块载入运行原理
2018/02/23 NodeJs
Vue.js 使用v-cloak后仍显示变量的解决方法
2018/11/19 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
vue各种事件监听实例(小结)
2020/06/24 Javascript
python自然语言编码转换模块codecs介绍
2015/04/08 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
Python操作MongoDB详解及实例
2017/05/18 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
django 自定义过滤器的实现
2019/02/26 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
让IE支持HTML5的方法
2012/12/11 HTML / CSS
新三好学生主要事迹
2014/01/23 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
教师节寄语2015
2015/03/23 职场文书
学术会议通知范文
2015/04/15 职场文书
送给小学生的暑假礼物!小学生必背99首古诗
2019/07/02 职场文书
成本低的5个创业项目:投资小、赚钱快
2019/08/20 职场文书