详解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中字典(Dictionary)用法实例详解
May 30 Python
python 删除非空文件夹的实例
Apr 26 Python
解决Mac安装scrapy失败的问题
Jun 13 Python
TensorFlow数据输入的方法示例
Jun 19 Python
Python进阶之@property动态属性的实现
Apr 01 Python
Django和Flask框架优缺点对比
Oct 24 Python
python二元表达式用法
Dec 04 Python
Python中six模块基础用法
Dec 08 Python
关于tensorflow softmax函数用法解析
Jun 30 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 09 Python
asyncio异步编程之Task对象详解
Mar 13 Python
使用tensorflow 实现反向传播求导
python基础学习之递归函数知识总结
TensorFlow的自动求导原理分析
Django分页器的用法你都了解吗
May 26 #Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 #Python
python numpy中multiply与*及matul 的区别说明
May 26 #Python
python文本处理的方案(结巴分词并去除符号)
You might like
zf框架的Filter过滤器使用示例
2014/03/13 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
List the Codec Files on a Computer
2007/06/11 Javascript
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
2009/07/18 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
小程序根据手机机型设置自定义底部导航距离
2019/06/04 Javascript
Python存取XML的常见方法实例分析
2017/03/21 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
python读取Excel表格文件的方法
2019/09/02 Python
python序列化与数据持久化实例详解
2019/12/20 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
面试求职的个人自我评价
2013/11/16 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
德能勤绩工作总结
2015/08/11 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书
Redis Stream类型的使用详解
2021/11/11 Redis
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang
Go语言编译原理之变量捕获
2022/08/05 Golang