通过实例解析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中apply函数的用法实例教程
Jul 31 Python
Python浅拷贝与深拷贝用法实例
May 09 Python
使用Python读取二进制文件的实例讲解
Jul 09 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
python代码实现逻辑回归logistic原理
Aug 07 Python
PYTHON EVAL的用法及注意事项解析
Sep 06 Python
Pycharm最新激活码2019(推荐)
Dec 31 Python
TensorFlow内存管理bfc算法实例
Feb 03 Python
PyCharm GUI界面开发和exe文件生成的实现
Mar 04 Python
Django ValuesQuerySet转json方式
Mar 16 Python
如何用python清洗文件中的数据
Jun 18 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 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 Ctemplate引擎开发相关内容
2012/03/03 PHP
php字符串截取函数用法分析
2014/11/25 PHP
PHP实现股票趋势图和柱形图
2015/02/07 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
PHP函数积累总结
2019/03/19 PHP
基于jquery的滑动样例代码
2010/11/20 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
PHP中CURL的几个经典应用实例
2015/01/23 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
2016/01/08 Javascript
EasyUI布局 高度自适应
2016/06/04 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
vue使用websocket的方法实例分析
2019/06/22 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
更改Python命令行交互提示符的方法
2015/01/14 Python
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
Python中文件的读取和写入操作
2018/04/27 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
英国领先的互联网葡萄酒礼品商:Vintage Wine & Port
2019/05/24 全球购物
财产保全担保书范文
2014/04/01 职场文书
董事长助理工作职责
2014/06/08 职场文书
摩登时代观后感
2015/06/03 职场文书
2015年暑假生活总结
2015/07/13 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
Python 视频画质增强
2022/04/28 Python