通过实例解析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单例模式实例分析
Jan 14 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
Jun 11 Python
Python实现简单的用户交互方法详解
Sep 25 Python
Python解决两个整数相除只得到整数部分的实例
Nov 10 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
Jan 19 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
Feb 11 Python
如何使用pandas读取txt文件中指定的列(有无标题)
Mar 05 Python
Python读写操作csv和excle文件代码实例
Mar 16 Python
python 日志 logging模块详细解析
Mar 31 Python
Django 实现图片上传和下载功能
Dec 31 Python
OpenCV-Python实现怀旧滤镜与连环画滤镜
Jun 09 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
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
javascript 数组的方法集合
2008/06/05 Javascript
ext 代码生成器
2009/08/07 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
jQuery中(function($){})(jQuery)详解
2015/07/15 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
根据输入邮箱号跳转到相应登录地址的解决方法
2016/12/13 Javascript
JS中parseInt()和map()用法分析
2016/12/16 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
python概率计算器实例分析
2015/03/25 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
Python星号*与**用法分析
2018/02/02 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
使用11行Python代码盗取了室友的U盘内容
2018/10/23 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
成人大专生实习期的自我评价
2013/10/02 职场文书
体育专业个人求职信范文
2013/12/27 职场文书
公务员更新知识培训实施方案
2014/03/31 职场文书
2014年六一儿童节演讲稿
2014/05/23 职场文书
岗位说明书标准范本
2014/07/30 职场文书
大明湖导游词
2015/02/03 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
同学联谊会邀请函
2019/06/24 职场文书
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript