Python零基础入门十七之描述符

今天主要说一下描述符的原理,基于property原理,在上一篇博客中已经简单的说了property,今天详细的说一下描述符。
(1)定义
描述符:就是将某种特殊类型的类的实例指派给另一个类的属性
这里的特殊类型的类指的是至少实现了以下方法中的任意一个:

__get__(self,instance,owner)
#_用于访问属性,它返回属性的值

__set__(self,instance,value)
#将在属性分配操作中调用,不返回任何内容

__delete__(self,instance)
#控制删除操作,不返回任何内容

通过下面的一段代码来了解一下上述函数以及各个参数的重要含义

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()
test=Test()
test.x
test.x="X-man"
del test.x

这里写图片描述

也就是说系统在执行test.x语句的时候,调用了MyDecriptor类中的get方法,根据打印输出的内容再看一下get函数中的三个参数的意义
第一个参数self:指的是MyDecriptor这个类对象本身
第二个参数instance:指的是Test这个类对象
第三个参数owner:这个对象的拥有者
其实根据描述符的定义这段代码也不难理解,描述符类MyDecriptor将
实例化对象赋值给了Test中的属性。这样在Test类中属性x便可以使用特殊类MyDescripor中的方法,实际上实现了代码的重用。

下面通过解决一个现实中的问题来进一步理解描述符,编写一段代码实现摄氏度与华氏度的转变,及输入摄氏度输出对应的华氏度,反之亦然。

class Celsius:
     def __init__(self,value=26):
          self.value=float(value)
     def __get__(self,instance,owner):
          return self.value
     def __set__(self,instance,value):
          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)
class Temprature:
     cel=Celsius()
     fah=Fahrenheit()
temp=Temprature()
temp.cel=30
print(temp.fah)
print(temp.cel)

在这段到代码中分别定义了两个特殊类Celsius和Fahrenheit,然后Temperature类中将上述两个特殊类的实例化对象赋值给了Temprature的两个属性,通过对这两个属性的操作,实现对代码的重用。而且使用描述符对于代码程序的修改也非常方便。

关于描述符的学习就先到这,之后有了更深一步的了解会进一步的补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值