通过实例解析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的URLconf中使用命名组的方法
Jul 18 Python
HTML中使用python屏蔽一些基本功能的方法
Jul 07 Python
python多进程中的内存复制(实例讲解)
Jan 05 Python
WxPython建立批量录入框窗口
Feb 27 Python
Python Pandas 箱线图的实现
Jul 23 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
Sep 26 Python
Python多线程模块Threading用法示例小结
Nov 09 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 Python
vscode调试django项目的方法
Aug 06 Python
python爬虫分布式获取数据的实例方法
Nov 26 Python
解决pytorch下出现multi-target not supported at的一种可能原因
Feb 06 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
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
PHP 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
php教程之魔术方法的使用示例(php魔术函数)
2014/02/12 PHP
php通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
laravel 数据验证规则详解
2019/10/23 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
python使用分治法实现求解最大值的方法
2015/05/12 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
python利用7z批量解压rar的实现
2019/08/07 Python
python+tkinter实现学生管理系统
2019/08/20 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
如何实现更换Jupyter Notebook内核Python版本
2020/05/18 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
HTML5如何使用SVG的方法示例
2019/01/11 HTML / CSS
迪拜航空官方网站:flydubai
2017/04/20 全球购物
上海方立数码笔试题
2013/10/18 面试题
写出二分查找算法的两种实现
2013/05/13 面试题
维德科技C#面试题笔试题
2015/12/09 面试题
简历中个人求职的自我评价模板
2013/11/29 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
论文答谢词
2015/01/20 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers