##描述符类的例子,这个例子说明了描述符和被描述符之间的关系

##摄氏温度

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 的描述符--完整例子详细解释的更多相关文章

  1. 课时46:魔法方法:描述符(property的原理)

    目录: 一.描述符(property的原理) 二.课时46课后习题及答案 ********************************** 一.描述符(property的原理) ********* ...

  2. Python进阶——什么是描述符?

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 在 Python 开发中,你可能听说过「描述符」这个概念,由于我们很少直接使用它,所以大部分开发人员 ...

  3. USB HID描述符【转】

    本文转载自: USB是个通用的总线,端口都是统一的.但是USB设备却各种各样,例如USB鼠标,USB键盘,U盘等等,那么USB主机是如何识别出不同的设备的呢?这就要依赖于描述符了.USB的描述符主要有 ...

  4. Python核心编程-描述符

    python中,什么描述符.描述符就是实现了"__get__"."__set__"或"__delete__" 方法中至少一个的对象.什么是非 ...

  5. Python 描述符(descriptor) 杂记

    转自:https://blog.tonyseek.com/post/notes-about-python-descriptor/ Python 引入的“描述符”(descriptor)语法特性真的很黄 ...

  6. python高级编程之最佳实践,描述符与属性01

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #最佳实践 """ 为了避免前面所有的 ...

  7. (转)USB的描述符及各种描述符之间的依赖关系

    全文链接:http://justmei.blog.163.com/blog/static/11609985320102421659260/?latestBlog 1 推荐 [原创] USB入门系列之七 ...

  8. USB2.0协议学习笔记---描述符

     USB设备描述符 字段名 长  度(字节)  地址偏移 含           义 bLenth   1  0  描述符长度 bDescriptorType   1  1 描述符类型 (这里为 1) ...

  9. 关于USBHID协议以及鼠标键盘描述符的解释【转】

    转自:https://blog.csdn.net/jiujiujiuqiuqiuqiu/article/details/47277685 一.HID设备识别 前面有提到关于SCSI协议的USB设备实现 ...

随机推荐

  1. freemarker报错之十

    1.错误描述 <html> <head> <meta http-equiv="content-type" content="text/htm ...

  2. java.sql.SQLException:No suitable driver found for http://localhost:3306/school

    1.错误描述 java.sql.SQLException:No suitable driver found for http://localhost:3306/school 2.错误原因 Class. ...

  3. 将泛类型集合List类转换成DataTable

    /// <summary> /// 将泛类型集合List类转换成DataTable /// </summary> /// <param name="list&q ...

  4. 芝麻HTTP: Scrapy小技巧-MySQL存储

    这两天上班接手,别人留下来的爬虫发现一个很好玩的 SQL脚本拼接. 只要你的Scrapy Field字段名字和 数据库字段的名字 一样.那么恭喜你你就可以拷贝这段SQL拼接脚本.进行MySQL入库处理 ...

  5. Exynos4412从SD卡启动的简单网络文件系统制作

    Exynos4412从SD卡启动的简单网络文件系统制作 1. 简介 嵌入式系统能够在开发板上正常运行,需要先进行系统配置,一个完整的嵌入式系统应该包含的几个部分::uboot,kernel,rootf ...

  6. hdu5887 Herbs Gathering

    神他妈随便写写就能过- 暴力枚举每个取不取 两个剪纸: 1.当剩下可用的时间小于最少需要用的时间 跳出 2.当剩下的植物按照理想情况(甚至可以取一部分)得到的极限答案比已经求出的答案大 跳出 #inc ...

  7. 异常-----freemarker.core.ParseException: Encountered "string"

    1.错误描述 freemarker.core.ParseException: Encountered "string" at line 21, column 21 in type. ...

  8. VBA Excel WideCharToMultiByte Compile error on 64-bit System

    Compile Error: The code in this project must be updated for use on64-bit systems. Please review and ...

  9. ProgressBar、ProgessDialog用法解析

    一.ProgressBar 1. 常用类型 1.1 不确定式圆形进度条 style="@android:style/Widget.Holo.Light.ProgressBar" s ...

  10. 1.17学习jquery权威指南

    1.ajax方面(东西比较杂,很多相关于.net挂钩的服务器端接触没有实际操作,全部放进来,或许以后当作demo使用) ¥(“body”).load("text.txt");   ...