通过实例解析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爬虫_自动获取seebug的poc实例
Aug 05 Python
Python logging管理不同级别log打印和存储实例
Jan 19 Python
Go/Python/Erlang编程语言对比分析及示例代码
Apr 23 Python
Flask-Mail用法实例分析
Jul 21 Python
python实现K近邻回归,采用等权重和不等权重的方法
Jan 23 Python
详解python3 + Scrapy爬虫学习之创建项目
Apr 12 Python
详解python中的index函数用法
Aug 06 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
用python画一只可爱的皮卡丘实例
Nov 21 Python
tensorflow指定GPU与动态分配GPU memory设置
Feb 03 Python
python实现的分层随机抽样案例
Feb 25 Python
Python中22个万用公式的小结
Jul 21 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
isset和empty的区别
2007/01/15 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
jquery 注意事项与常用语法小结
2010/06/07 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
修改或扩展jQuery原生方法的代码实例
2015/01/13 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
2017/04/10 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
JavaScript 中的无穷数(Infinity)详解
2020/02/13 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
[36:20]KG vs SECRET 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python三级目录展示的实现方法
2016/09/28 Python
你真的了解Python的random模块吗?
2017/12/12 Python
Django Sitemap 站点地图的实现方法
2019/04/29 Python
python简单实现最大似然估计&scipy库的使用详解
2020/04/15 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
python和opencv构建运动检测器的实现
2021/03/03 Python
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
数学教研活动总结
2014/07/02 职场文书
开学第一周值周总结
2015/07/16 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
党风廉政建设心得体会
2019/05/21 职场文书
golang import自定义包方式
2021/04/29 Golang
golang elasticsearch Client的使用详解
2021/05/05 Golang
spring boot中nativeQuery的用法
2021/07/26 Java/Android