通过实例解析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编写一个简单的俄罗斯方块游戏的教程
Apr 03 Python
使用py2exe在Windows下将Python程序转为exe文件
Mar 04 Python
在Linux命令行终端中使用python的简单方法(推荐)
Jan 23 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
Mar 01 Python
pandas通过字典生成dataframe的方法步骤
Jul 23 Python
Python爬虫实现“盗取”微信好友信息的方法分析
Sep 16 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
python3的UnicodeDecodeError解决方法
Dec 20 Python
pytorch实现手写数字图片识别
May 20 Python
Pytorch可视化的几种实现方法
Jun 10 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
Jun 21 Python
python 镜像环境搭建总结
Sep 23 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的面试题集,附我的答案和分析(一)
2006/11/19 PHP
SMARTY学习手记
2007/01/04 PHP
php array_search() 函数使用
2010/04/13 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
2013/07/01 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
php 静态属性和静态方法区别详解
2017/04/09 PHP
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
向左滚动文字 js代码效果
2013/08/17 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
jQuery用FormData实现文件上传的方法
2016/11/21 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
Python合并字符串的3种方法
2015/05/21 Python
简单介绍django提供的加密算法
2019/12/18 Python
Python ORM编程基础示例
2020/02/02 Python
django从后台返回html代码的实例
2020/03/11 Python
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
加拿大奢华时装品牌:Mackage
2018/01/10 全球购物
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
社区文化建设方案
2014/05/02 职场文书
党建工作汇报材料
2014/12/24 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
网络妈妈观后感
2015/06/08 职场文书
关于做家务的心得体会
2016/01/23 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis