通过实例解析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 相关文章推荐
详解Django中的form库的使用
Jul 18 Python
python 垃圾收集机制的实例详解
Aug 20 Python
pandas中Timestamp类用法详解
Dec 11 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
Oct 17 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 Python
基于Tensorflow高阶读写教程
Feb 10 Python
python输出第n个默尼森数的实现示例
Mar 08 Python
python实现简单坦克大战
Mar 27 Python
Python读取Excel一列并计算所有对象出现次数的方法
Sep 04 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
pytorch中index_select()的用法详解
Jan 06 Python
pytorch锁死在dataloader(训练时卡死)
May 28 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
PHP数据库开发知多少
2006/10/09 PHP
使用Limit参数优化MySQL查询的方法
2008/11/12 PHP
在PHP中养成7个面向对象的好习惯
2010/01/28 PHP
php连接函数implode与分割explode的深入解析
2013/06/26 PHP
PHP中的reflection反射机制测试例子
2014/08/05 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
JQuery toggle使用分析
2009/11/16 Javascript
js change,propertychange,input事件小议
2011/12/20 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
jQuery随机密码生成的方法
2015/03/09 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
Angular2 http jsonp的实例详解
2017/08/31 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
用Electron写个带界面的nodejs爬虫的实现方法
2019/01/29 NodeJs
js JSON.stringify()基础详解
2019/06/19 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
Python中使用PyQt把网页转换成PDF操作代码实例
2015/04/23 Python
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
对python列表里的字典元素去重方法详解
2019/01/21 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
Django权限控制的使用
2021/01/07 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
澳大利亚购买健身器材网站:Gym Direct
2019/12/19 全球购物
借款协议书范本
2014/04/22 职场文书
社区党建工作总结2015
2015/05/13 职场文书
原告代理词范文
2015/05/25 职场文书
遗愿清单观后感
2015/06/09 职场文书
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS