通过实例解析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节点值的方法
May 05 Python
Python实现截屏的函数
Jul 25 Python
python通过加号运算符操作列表的方法
Jul 28 Python
Python快速从注释生成文档的方法
Dec 26 Python
Python单例模式的两种实现方法
Aug 14 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
解决django-xadmin列表页filter关联对象搜索问题
Nov 15 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
May 25 Python
pytorch 计算ConvTranspose1d输出特征大小方式
Jun 23 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
python调用私有属性的方法总结
Jul 24 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实现与ASP Banner组件相似的类
2006/10/09 PHP
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
thinkphp微信开发(消息加密解密)
2015/12/02 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
为jquery的ajaxfileupload增加附加参数的方法
2014/03/04 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
js精准的倒计时函数分享
2016/06/29 Javascript
JS库之Highlight.js的用法详解
2017/09/13 Javascript
通过jquery toggleClass()属性制作文章段落更改背景颜色
2018/05/21 jQuery
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
python比较2个xml内容的方法
2015/05/11 Python
Python+OpenCV让电脑帮你玩微信跳一跳
2018/01/04 Python
python构建指数平滑预测模型示例
2019/11/21 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
Pytorch 使用 nii数据做输入数据的操作
2020/05/26 Python
几款好用的python工具库(小结)
2020/10/20 Python
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
介绍一下Linux文件的记录形式
2013/09/29 面试题
应届生会计电算化求职信
2013/10/03 职场文书
“学雷锋活动月”总结
2014/03/09 职场文书
任命书标准格式
2015/03/02 职场文书
罚款通知怎么写
2015/04/22 职场文书
护士岗位竞聘书
2015/09/15 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
python playwrigh框架入门安装使用
2022/07/23 Python