详解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中内置的itertools模块
Apr 29 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
Jul 25 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 Python
在python中pandas的series合并方法
Nov 12 Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 Python
Python关于反射的实例代码分享
Feb 20 Python
Python过滤掉numpy.array中非nan数据实例
Jun 08 Python
Pytorch 高效使用GPU的操作
Jun 27 Python
python 爬取腾讯视频评论的实现步骤
Feb 18 Python
详解Python自动化之文件自动化处理
Jun 21 Python
Django Paginator分页器的使用示例
Jun 23 Python
使用tensorflow 实现反向传播求导
python基础学习之递归函数知识总结
TensorFlow的自动求导原理分析
Django分页器的用法你都了解吗
May 26 #Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 #Python
python numpy中multiply与*及matul 的区别说明
May 26 #Python
python文本处理的方案(结巴分词并去除符号)
You might like
Php注入点构造代码
2008/06/14 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
使用node.js 制作网站前台后台
2014/11/13 Javascript
js使用心得分享
2015/01/13 Javascript
js实现类似jquery里animate动画效果的方法
2015/04/10 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
node.js实现快速截图
2016/08/27 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
2017/03/02 Javascript
vue.js获取数据库数据实例代码
2017/05/26 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
python 数据的清理行为实例详解
2017/07/12 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
python变量命名的7条建议
2019/07/04 Python
Django框架视图函数设计示例
2019/07/29 Python
谈谈python垃圾回收机制
2020/09/27 Python
python中PyQuery库用法分享
2021/01/15 Python
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
经济信息管理专业大学生求职信
2013/09/27 职场文书
如何做好总经理助理
2013/11/12 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
民间借贷协议书范本
2014/10/01 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
员工担保书范本
2015/09/22 职场文书
详解Python常用的魔法方法
2021/06/03 Python