详解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基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 Python
Python爬取网易云音乐热门评论
Mar 31 Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 Python
python xlsxwriter创建excel图表的方法
Jun 11 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
Sep 13 Python
详解10个可以快速用Python进行数据分析的小技巧
Jun 24 Python
Python绘制二维曲线的日常应用详解
Dec 04 Python
使用python实现希尔、计数、基数基础排序的代码
Dec 25 Python
python读取当前目录下的CSV文件数据
Mar 11 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
tensorboard 可视化之localhost:6006不显示的解决方案
May 22 Python
利用python做数据拟合详情
Nov 17 Python
使用tensorflow 实现反向传播求导
python基础学习之递归函数知识总结
TensorFlow的自动求导原理分析
Django分页器的用法你都了解吗
May 26 #Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 #Python
python numpy中multiply与*及matul 的区别说明
May 26 #Python
python文本处理的方案(结巴分词并去除符号)
You might like
php 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
2015/12/25 PHP
功能强大的php分页函数
2016/07/20 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
$.ajax json数据传递方法
2008/11/19 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
JS实现页面进入和返回定位到具体位置
2016/12/08 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
你真的了解BOM中的history对象吗
2017/02/13 Javascript
js中作用域的实例解析
2017/03/16 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
JQuery使用数组遍历跳出each循环
2020/09/01 jQuery
selenium+python 对输入框的输入处理方法
2018/10/11 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
Python 元组操作总结
2019/09/18 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
简历自我评价怎么写好呢?
2014/01/04 职场文书
奉献演讲稿范文
2014/05/21 职场文书
药品开票员岗位职责
2015/04/15 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
Python re.sub 反向引用的实现
2021/07/07 Python
Win10玩csgo闪退如何解决?Win10玩csgo闪退的解决方法
2022/07/23 数码科技