通过实例解析python描述符原理作用
作者:yaominghui 时间:2021-01-15 03:14:57
这篇文章主要介绍了通过实例解析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(类对象,属性))语句时,都会调用该方法。
来源:https://www.cnblogs.com/xiaobaizzz/p/12227340.html
标签:python,描述,符
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
asp如何验证日期输入是否正确?
2010-06-10 18:38:00
Scrapy项目实战之爬取某社区用户详情
2022-04-16 11:36:31
Python+Pygame编写一个Pong游戏
2023-08-04 15:58:31
![](https://img.aspxhome.com/file/2023/3/61983_0s.png)
python sort、sort_index方法代码实例
2022-12-16 00:43:17
Python爬虫如何应对Cloudflare邮箱加密
2023-10-16 22:25:35
ASP从数据库中获取下载文件
2007-10-06 21:17:00
python机器学习库scikit-learn:SVR的基本应用
2022-04-25 09:38:34
![](https://img.aspxhome.com/file/2023/5/103605_0s.png)
OpenCV实现图像滤波之双边滤波
2022-05-14 07:35:30
![](https://img.aspxhome.com/file/2023/6/82536_0s.jpg)
mysql 错误:ERROR 1045 (28000): Access deni
2010-09-30 14:48:00
在python中如何建立一个自己的包
2022-12-27 12:42:25
![](https://img.aspxhome.com/file/2023/5/72185_0s.png)
php牛逼的面试题分享
2023-11-20 19:31:35
解决python spyder 突然打不开的问题
2022-07-07 19:43:06
用MySQL内建复制功能来优化可用性
2009-02-13 13:55:00
Python实现通过解析域名获取ip地址的方法分析
2023-08-14 16:10:29
![](https://img.aspxhome.com/file/2023/2/97172_0s.png)
Python安装并操作redis实现流程详解
2023-06-15 00:17:22
![](https://img.aspxhome.com/file/2023/7/100287_0s.png)
你的网站使用了微格式了么
2009-05-21 12:10:00
Mysql中limit的用法方法详解与注意事项
2023-11-16 09:20:05
浅谈 Mousewheel 事件
2010-08-16 12:37:00
Sql Server 无日志文件附加
2010-05-30 11:23:00
python数据处理之如何修改索引和行列
2023-11-04 13:57:27
![](https://img.aspxhome.com/file/2023/7/64647_0s.png)