Python3 的描述符--完整例子详细解释
##描述符类的例子,这个例子说明了描述符和被描述符之间的关系
##摄氏温度
- class Celsius(): ## 1 描述符类
- def __init__(self,value = 26.0): ## 2摄氏温度值初始化赋值
- self.value = float(value) ## 3
- def __get__(self,instance,owner): ## 4
- return self.value ## 5
- def __set__(self,instance,value): ##6
- self.value = float(value) ##7
##华氏温度
- class Fahrenheit(): ## 8 描述符类
- def __get__(self,instance,owner): ## 8.1
- return instance.cel * 1.8 +32 ## 9
- def __set__(self,instance,value): ## 10
- instance.cel = (float(value)-32)/18 ##11
##被描述的类
- class Temperature(): ## 12 被描述符类
- cel = Celsius() ## 13 描述符类指派到被描述符类的对象
- fah = Fahrenheit() ## 14 描述符类指派到被描述符类的对象
###输入输出结果演示
- >>> temp = Temperature() #15
- >>> temp.cel #16
- 26.0 #17
- >>> temp.cel = 30 #18
- >>> temp.fah #19
- 86.0 #20
- >>> temp.fah = 100 #21
- >>> temp.cel #22
- 3.7777777777777777 #23
- >>>
###解释这一段代码,
'''首先解释这个程序代码:上边的摄氏温度和华氏温度都是描述符,都是对下边的那个被描述符类进行
描述的,描述的是他的属性cel fah 这两个属性参数。这里边的属性关系13 14 两个语句是对被描述符
的两个属性的相当于赋值相当于实例化的一个操作,那么cel 和fah 这两个被描述符的属性就相当于是
描述符Celsius()和Fahrenheit()的实例化对象了。
现在根据输入输出来解释实际操作时的一些问题,当输入15的时候,就是被描述符的一个实例化。16就
是对实例化对象也就是被描述对象的属性访问,这时注意到13这个属性又被Celsius()所描述,那么就会
回到1处,Celsius()描述符类中有2,那么就会初始化一个值,传过去就是属性的值cel.value = 26.0,
那么接下来16就是被描述对象访问属性,这个属性值是26.0.
那么18就很明显就是对被描述对象的赋值了,娜美被描述对象的cel属性就是30,此时13句就起到了作用
就是说属性cel被赋值,那么对这个属性的就进行操作了,赋值操作就是Celsius()描述符类的__set__
操作,那就是语句6,得到cel.value = 30 ,接下来输入输出结果中19句的由来就是,由于6句的处理得到
cel.value = 30,然后到8,也就是对被描述符对象的属性fah进行访问,那么就是到Fahrenheit()中的
8.1进行获取的操作,获取操作9,instance是实例化对象拥有者temp,那么9的公式就是返回temp.cel * 1.8 +32
而temp.cel 在18的时候经过操作已经赋值为30,所以这里的返回值就是计算的结果86.0,。同理接下来的输入输出
结果的内容结束的方式和上边的解释思想是一样的。
注:初学者难免会有理解不对和理解不到位的地方,还望大家批评指正,谢谢!
Python3 的描述符--完整例子详细解释的更多相关文章
- 课时46:魔法方法:描述符(property的原理)
目录: 一.描述符(property的原理) 二.课时46课后习题及答案 ********************************** 一.描述符(property的原理) ********* ...
- Python进阶——什么是描述符?
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 在 Python 开发中,你可能听说过「描述符」这个概念,由于我们很少直接使用它,所以大部分开发人员 ...
- USB HID描述符【转】
本文转载自: USB是个通用的总线,端口都是统一的.但是USB设备却各种各样,例如USB鼠标,USB键盘,U盘等等,那么USB主机是如何识别出不同的设备的呢?这就要依赖于描述符了.USB的描述符主要有 ...
- Python核心编程-描述符
python中,什么描述符.描述符就是实现了"__get__"."__set__"或"__delete__" 方法中至少一个的对象.什么是非 ...
- Python 描述符(descriptor) 杂记
转自:https://blog.tonyseek.com/post/notes-about-python-descriptor/ Python 引入的“描述符”(descriptor)语法特性真的很黄 ...
- python高级编程之最佳实践,描述符与属性01
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #最佳实践 """ 为了避免前面所有的 ...
- (转)USB的描述符及各种描述符之间的依赖关系
全文链接:http://justmei.blog.163.com/blog/static/11609985320102421659260/?latestBlog 1 推荐 [原创] USB入门系列之七 ...
- USB2.0协议学习笔记---描述符
USB设备描述符 字段名 长 度(字节) 地址偏移 含 义 bLenth 1 0 描述符长度 bDescriptorType 1 1 描述符类型 (这里为 1) ...
- 关于USBHID协议以及鼠标键盘描述符的解释【转】
转自:https://blog.csdn.net/jiujiujiuqiuqiuqiu/article/details/47277685 一.HID设备识别 前面有提到关于SCSI协议的USB设备实现 ...
随机推荐
- R语言︱函数使用技巧(循环、if族/for、switch、repeat、ifelse、stopifnot)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 后续加更内容: 应用一:if族有哪些成员呢?- ...
- 动手制作属于你自己的WIN PE3.0
最近想要更新公司的网Ghost系统,所以小研究一下win pe ,在网上看见一个很不错的教程,在这里分享给大家! 并非原创,纯属转载!!O(∩_∩)O~天缘的作品,很是佩服这个哥们啊..... 一.W ...
- return *this 与return this的区别
return *this返回当前对象的引用(也就是返回当前对象) return this返回当前对象的地址. #include <iostream> using namespace std ...
- mobile开发中常用的css
1. viewport: 也就是可视区域.对于桌面浏览器,我们都很清楚viewport是什么,就是出去了所有工具栏.状态栏.滚动条等等之后用于看网页的区域, 这是真正有效的区域.由于移动设备屏幕宽度不 ...
- Struts2(六) 用Struts完成客户列表显示
Struts完成客户列表显示 所用的基础知识 在之前的随笔中已经讲过.这篇是介绍如何使用Struts 完成客户列表显示 . 下面是 完成的代码执行逻辑图: 抽取项目部分代码 相信大家认真看一遍就明 ...
- hdu5937 Equation
题解其实网上有 突然有点感想 为什么可以用搜索或状压,因为方案数很有限,它要求每种方案不同就意味着搜索的次数也一定,所以现在就应该坚定往这方面想,找部分方案的贪心.这和上一题一样,都是先暴力,后面处理 ...
- NVIDIA Geforce GT 730 OpenGL 图形显示异常花屏
原因:C盘空间爆表,用dism++清理.结果用力过猛,清完后程序里的图形直接马赛克了... 上个图感受一下吧... 嘿别说,还有那么点艺术风! 别闹了,这个问题很严重,很严肃好不好! 因为程序和数据都 ...
- PyCharm运行报编码错误
运行报如下错误: SyntaxError: Non-ASCII character '\xe8' in file /home/ubuntu/code/201803091253-text.py on l ...
- haproxy反向代理配置示例
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- 自己写的,然后配合zepto+iscroll的上拉加载
/** * Created by jl on 2016/3/28. *///初始化绑定iScroll控件var actHtml="";var myScroll, pullUp ...