您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:详解Python魔法方法之描述符类

51自学网 2021-10-30 22:37:30
  python
这篇教程详解Python魔法方法之描述符类写得很实用,希望能帮到您。

描述符类要求:

描述符就是将某种特殊类型的类的实例指派给另一个类的属性

至少要实现以下的一个方法:

•__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

测试:

在这里插入图片描述

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.cel26.0>>> temp.fah78.80000000000001>>> temp.fah = 78.8>>> temp.cel25.999999999999996

到此这篇关于详解Python魔法方法之描述符类的文章就介绍到这了,更多相关python描述符类内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


使用tensorflow 实现反向传播求导
tensorflow中的数据类型dtype用法说明
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。