通过实例解析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处理PHP数组文本文件实例
Sep 18 Python
讲解Python中的递归函数
Apr 27 Python
python中退出多层循环的方法
Nov 27 Python
Python代码打开本地.mp4格式文件的方法
Jan 03 Python
Django用户认证系统 User对象解析
Aug 02 Python
Python+AutoIt实现界面工具开发过程详解
Aug 07 Python
Python 中如何实现参数化测试的方法示例
Dec 10 Python
python实现双色球随机选号
Jan 01 Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 Python
python实现录屏功能(亲测好用)
Mar 02 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
Python实现拼音转换
Jun 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
2019十大人气国漫
2020/03/13 国漫
德劲1103二次变频版的打磨
2021/03/02 无线电
php下使用SimpleXML 处理XML 文件
2010/02/27 PHP
php处理斐波那契数列非递归方法
2012/02/04 PHP
PHP数组循环操作详细介绍 附实例代码
2013/02/03 PHP
php对二维数组按指定键值key排序示例代码
2013/11/26 PHP
CI框架中zip类应用示例
2014/06/17 PHP
Fedora下安装php Redis扩展笔记
2014/09/03 PHP
如何使用GDB调试PHP程序
2015/12/08 PHP
浅谈php中curl、fsockopen的应用
2016/12/10 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
Javascript中的五种数据类型详解
2014/12/26 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
Node之简单的前后端交互(实例讲解)
2017/11/14 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
Pycharm 字体大小调整设置的方法实现
2019/09/27 Python
用 python 进行微信好友信息分析
2020/11/28 Python
详解html5 canvas常用api总结(二)--绘图API
2016/12/14 HTML / CSS
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
编辑硕士自荐信范文
2013/11/27 职场文书
高校教师思想汇报
2014/01/11 职场文书
工地安全生产标语
2014/06/06 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
白银帝国观后感
2015/06/17 职场文书
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang