详解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的print用法示例
Feb 11 Python
Python在图片中添加文字的两种方法
Apr 29 Python
python爬虫入门教程--快速理解HTTP协议(一)
May 25 Python
浅析Git版本控制器使用
Dec 10 Python
Python实现修改文件内容的方法分析
Mar 25 Python
python 实现敏感词过滤的方法
Jan 21 Python
python多进程读图提取特征存npy
May 21 Python
Python3 实现串口两进程同时读写
Jun 12 Python
selenium跳过webdriver检测并模拟登录淘宝
Jun 12 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
Python实现画图软件功能方法详解
Jul 28 Python
Python-OpenCV实现图像缺陷检测的实例
Jun 11 Python
使用tensorflow 实现反向传播求导
python基础学习之递归函数知识总结
TensorFlow的自动求导原理分析
Django分页器的用法你都了解吗
May 26 #Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 #Python
python numpy中multiply与*及matul 的区别说明
May 26 #Python
python文本处理的方案(结巴分词并去除符号)
You might like
PHP入门速成(2)
2006/10/09 PHP
打造计数器DIY三步曲(上)
2006/10/09 PHP
PHP学习之字符串比较和查找
2011/04/17 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
Linux中为php配置伪静态
2014/12/17 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
PHP登录(ajax提交数据和后台校验)实例分享
2016/12/29 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
PHP面向对象程序设计继承用法简单示例
2018/12/28 PHP
JQuery 小练习(实例代码)
2009/08/07 Javascript
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
Textarea与懒惰渲染实现代码
2012/01/04 Javascript
详解js闭包
2014/09/02 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
2015/06/05 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
JS绘制微信小程序画布时钟
2016/12/24 Javascript
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
一篇文章介绍redux、react-redux、redux-saga总结
2019/05/23 Javascript
解决vue初始化项目时,一直卡在Project description上的问题
2019/10/31 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
python中字典dict常用操作方法实例总结
2015/04/04 Python
python基础教程之Filter使用方法
2017/01/17 Python
pandas全表查询定位某个值所在行列的方法
2018/04/12 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
numpy.transpose()实现数组的转置例子
2019/12/02 Python
Python bytes string相互转换过程解析
2020/03/05 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
创先争优标语
2014/06/27 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
股东授权委托书
2014/10/15 职场文书
2014年社区教育工作总结
2014/12/02 职场文书
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server