通过实例解析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实现KNN邻近算法
Jan 28 Python
Python实现简单遗传算法(SGA)
Jan 29 Python
python实现学生信息管理系统
Apr 05 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
Mar 14 Python
Python从文件中读取数据的方法讲解
Feb 14 Python
python3 批量获取对应端口服务的实例
Jul 25 Python
Python Pandas数据中对时间的操作
Jul 30 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
python打包生成so文件的实现
Oct 30 Python
Python logging自定义字段输出及打印颜色
Nov 30 Python
基于flask实现五子棋小游戏
May 25 Python
Python内置数据类型中的集合详解
Mar 18 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
Codeigniter实现多文件上传并创建多个缩略图
2014/06/12 PHP
php 常用的系统函数
2017/02/07 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
php格式文件打开的四种方法
2018/02/24 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
php实现的生成排列算法示例
2019/07/25 PHP
基于Jquery的表格隔行换色,移动换色,点击换色插件
2010/12/22 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
AngularJS入门教程之过滤器用法示例
2016/11/02 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
百度搜索框智能提示案例jsonp
2016/11/28 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
2017/07/08 jQuery
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
浅析Visual Studio Code断点调试Vue
2018/02/27 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
2019/09/16 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
详解python中init方法和随机数方法
2019/03/13 Python
Python安装selenium包详细过程
2019/07/23 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
python3实现简单飞机大战
2020/11/29 Python
关于HTML5的安全问题开发人员需要牢记的
2012/06/21 HTML / CSS
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
光棍节联谊晚会活动策划书
2014/10/10 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android