详解Python魔法方法之描述符类


Posted in Python onMay 26, 2021

描述符类要求:

描述符就是将某种特殊类型的类的实例指派给另一个类的属性

至少要实现以下的一个方法:

•__get__(self, instance, owner)
?用于访问属性,它返回属性的值

•__set__(self, instance, value)
?将在属性分配操作中调用,不返回任何内容

•__delete__(self, instance)
?控制删除操作,不返回任何内容

eg:

>>> class MyDecriptor:
    def __get__(self,instance,owner):
        print("getting...",self,instance,owner)
    def __set__(self,instance,value):
        print("setting...",self,instance,value)
    def __delete__(self,instance):
        print("deleting...",self,instance)
>>> class Test:
    x = MyDecriptor()   #取Mydecriptor类的实例指派给Test类的属性x

测试:

详解Python魔法方法之描述符类

eg:

>>> class MyProperty:
    def __init__(self,fget = None,fset = None,fdel = None):
        self.fget = fget
        self.fset = fset
        self.fdel = fdel
    def __get__(self,instance,owner):
        return self.fget(instance)
    def __set__(self,instance,value):
        self.fset(instance,value)
    def __delete__(self,instance):
        self.fdel(instance)

        
>>> class C:
    def __init__(self):
        self._x = None
    def getX(self):
        return self._x
    def setX(self,value):
        self._x = value
    def delX(self):
        del self._x
    x = MyProperty(getX,setX,delX)

    
>>> c = C()
>>> c.x = "HELLOW"
>>> c.x
'HELLOW'
>>> c._x
'HELLOW'
>>> del c.x
>>> c._x

eg:

摄氏度转华氏度:华氏度=摄氏度*1.8+32

要求:

•先定义一个温度类,然后定义两个描述符类用于描述摄氏度和华氏度两个属性。
•要求两个属性会自动进行转换,也就是说你可以给摄氏度这个属性赋值,然后打印的华氏度属性是自动转换后的结果。

ss Celsius:  #摄氏度描述符类
    def __init__(self,value = 26.0):#self为描述符类自身(此为摄氏度描述符类)的实例(此为cel)
        self.value = float(value)
    def __get__(self,instance,owner):#instance是这个描述符的拥有者所在的类的实例(此为temp)
        return self.value
    def __set__(self,instance,value):#owner是这个描述符的拥有者所在的类本身(此为温度类)
        self.value = float(value)

class Fahrenheit:   #华氏度描述符类
    def __get__(self,instance,owner):
        return instance.cel * 1.8 +32  #摄氏度转华氏度
    def __set__(self,instance,value):
        instance.cel = ((float)(value)- 32)/ 1.8 
        ## instance.cel 则会执行Temperature.cel,接着执行Celsius类中的__set__方法
        
class Temperature:   #温度类
    cel = Celsius()   #设置摄氏度属性(描述符类的实例指派给了温度类的属性)
    fah = Fahrenheit()# temp.fah ,当属性fah被赋值的时候,则会执行Fahrenheit描述符类的__set__方法
						
>>> temp = Temperature()
>>> temp.cel
26.0
>>> temp.fah
78.80000000000001
>>> temp.fah = 78.8
>>> temp.cel
25.999999999999996

到此这篇关于详解Python魔法方法之描述符类的文章就介绍到这了,更多相关python描述符类内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python生成日历实例解析
Aug 21 Python
python和bash统计CPU利用率的方法
Jul 10 Python
Python实现的逻辑回归算法示例【附测试csv文件下载】
Dec 28 Python
用python求一个数组的和与平均值的实现方法
Jun 29 Python
OpenCV 轮廓检测的实现方法
Jul 03 Python
简单介绍django提供的加密算法
Dec 18 Python
python 实现从高分辨图像上抠取图像块
Jan 02 Python
Python实现新型冠状病毒传播模型及预测代码实例
Feb 05 Python
给ubuntu18安装python3.7的详细教程
Jun 08 Python
Python 数据的累加与统计的示例代码
Aug 03 Python
使用py-spy解决scrapy卡死的问题方法
Sep 29 Python
Python使用protobuf序列化和反序列化的实现
May 19 Python
使用tensorflow 实现反向传播求导
python基础学习之递归函数知识总结
TensorFlow的自动求导原理分析
Django分页器的用法你都了解吗
May 26 #Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 #Python
python numpy中multiply与*及matul 的区别说明
May 26 #Python
python文本处理的方案(结巴分词并去除符号)
You might like
多文件上传的例子
2006/10/09 PHP
Php+SqlServer实现分页显示
2006/10/09 PHP
PHP和XSS跨站攻击的防范
2007/04/17 PHP
yii框架搜索分页modle写法
2016/12/19 PHP
php读取和保存base64编码的图片内容
2017/04/22 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
2018/06/05 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
js转义字符介绍
2013/11/05 Javascript
AngularJS内置指令
2015/02/04 Javascript
jquery实现的蓝色二级导航条效果代码
2015/08/24 Javascript
jquery调整表格行tr上下顺序实例讲解
2016/01/09 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
windows下更新npm和node的方法
2017/11/30 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
Python 列表(List)操作方法详解
2014/03/11 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
Numpy数组的保存与读取方法
2018/04/04 Python
python如何实现一个刷网页小程序
2018/11/27 Python
Python函数返回不定数量的值方法
2019/01/22 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
智乐游戏测试笔试题
2014/05/21 面试题
Java基础面试题
2012/11/02 面试题
肯尼迪就职演说稿
2013/12/31 职场文书
团队会宣传标语
2014/10/09 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
博士论文答辩开场白
2015/06/01 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL