Python零基础入门十七之描述符
来源:互联网 发布:引力波被发现 知乎 编辑:程序博客网 时间:2024/06/07 19:37
今天主要说一下描述符的原理,基于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.xtest.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=30print(temp.fah)print(temp.cel)
在这段到代码中分别定义了两个特殊类Celsius和Fahrenheit,然后Temperature类中将上述两个特殊类的实例化对象赋值给了Temprature的两个属性,通过对这两个属性的操作,实现对代码的重用。而且使用描述符对于代码程序的修改也非常方便。
关于描述符的学习就先到这,之后有了更深一步的了解会进一步的补充。
0 0
- Python零基础入门十七之描述符
- Python零基础入门二十七之GUI组件
- 零基础入门学习Python(24):魔法方法(4)描述符
- python零基础入门之安装-包
- Python零基础入门之九字典
- Python零基础入门之十集合
- Python零基础入门之十一文件
- Python零基础入门十三之异常
- Python零基础入门十四之对象
- Python零基础入门十六之继承
- Python零基础入门十八之模块
- Python零基础入门三十一之事件
- Python零基础入门之六python函数
- 【零基础入门学习Python笔记006】Python之常用操作符
- python爬虫零基础入门
- 零基础如何入门Python
- Python零基础入门一
- 零基础入门学习Python
- Docker学习笔记(五)-fixbug2-Hash sum mismatch
- 移动设备非实时快速同步方案
- Android百度地图Poi检索开发总结
- mybatis-generator-core 代码修改
- Opengl---gluLookAt函数详解
- Python零基础入门十七之描述符
- Android 沉浸式状态栏
- 1095. Cars on Campus (30)-PAT甲级真题(map,排序)
- JAVA WEB从入门到精通day08 JUnit和反射的学习
- 2017.1.16【初中部 】普及组模拟赛C组 cirs 题解
- 菊花厂 vs 互联网公司
- windows与linux下执行.class(包含main方法)
- HR8P506,哪里冒出来的SystemInit函数,用库函数点灯again.
- HTML5菜单栏切换实现底部滑块滑动效果实现