通过实例解析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实现子类调用父类的方法
Nov 10 Python
python通过floor函数舍弃小数位的方法
Mar 17 Python
windows下Python实现将pdf文件转化为png格式图片的方法
Jul 21 Python
python3个性签名设计实现代码
Jun 19 Python
【python】matplotlib动态显示详解
Apr 11 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
Oct 18 Python
基于python3监控服务器状态进行邮件报警
Oct 19 Python
Python importlib动态导入模块实现代码
Apr 16 Python
如何在sublime编辑器中安装python
May 20 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
粗暴解决CUDA out of memory的问题
May 22 Python
Python实现视频自动打码的示例代码
Apr 08 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 存取 MySQL 数据库的一个例子
2006/10/09 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
php curl发送请求实例方法
2019/08/01 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
validator验证控件使用代码
2010/11/23 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
图解js图片轮播效果
2015/12/20 Javascript
轻松掌握JavaScript策略模式
2016/08/25 Javascript
Angular.js中$apply()和$digest()的深入理解
2016/10/13 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
jQuery length 和 size()区别总结
2018/04/26 jQuery
nodejs前端模板引擎swig入门详解
2018/05/15 NodeJs
React父子组件间的传值的方法
2018/11/13 Javascript
vue拖拽组件使用方法详解
2018/12/01 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
2019/10/12 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
Python编写登陆接口的方法
2017/07/10 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
基于python 将列表作为参数传入函数时的测试与理解
2020/06/05 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
css3实现蒙版弹幕功能
2019/06/18 HTML / CSS
高中军训感言200字
2014/02/23 职场文书
委托书样本
2014/04/02 职场文书
小学庆六一活动总结
2014/08/28 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
Redis 常见使用场景
2021/08/30 Redis
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL