详解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 当前全局变量和入口参数的所有属性
Jul 01 Python
python在windows下实现备份程序实例
Jul 04 Python
Python入门篇之列表和元组
Oct 17 Python
python 自动去除空行的实例
Jul 24 Python
python输出决策树图形的例子
Aug 09 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
python脚本后台执行方式
Dec 21 Python
pytorch程序异常后删除占用的显存操作
Jan 13 Python
OpenCV python sklearn随机超参数搜索的实现
Jan 17 Python
python实现加密的方式总结
Jan 19 Python
PyCharm 无法 import pandas 程序卡住的解决方式
Mar 09 Python
Python中使用Opencv开发停车位计数器功能
Apr 04 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
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
php compact 通过变量创建数组
2016/11/15 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
详解JS函数重载
2014/12/04 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
jquery实现静态搜索功能(可输入搜索文字)
2017/03/28 jQuery
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
Python中下划线的使用方法
2015/03/27 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
Python循环实现n的全排列功能
2019/09/16 Python
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
Lee牛仔裤澳大利亚官网:美国著名牛仔裤品牌
2017/09/02 全球购物
英国手机零售商:Metrofone
2019/03/18 全球购物
Notino法国:购买香水和化妆品
2019/04/15 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
Shell编程面试题
2016/05/29 面试题
配置管理计划的主要内容有哪些
2014/06/20 面试题
vue实现倒计时功能
2021/03/24 Vue.js
新郎婚宴答谢词
2014/01/19 职场文书
充分就业社区汇报材料
2014/05/07 职场文书
品酒会策划方案
2014/05/26 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
委托函范文
2015/01/29 职场文书
2015年医生个人工作总结
2015/04/25 职场文书
学校少先队工作总结
2015/08/12 职场文书
导游词之无锡东林书院
2019/12/11 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
idea 在springboot中使用lombok插件的方法
2021/08/02 Java/Android