IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python描述器 -> 正文阅读

[Python知识库]python描述器

什么是描述器?

描述器(Descriptors):一个有”绑定行为”的对象属性(object attribute),它的属性访问被描述器协议方法重写,可以理解为将某种特殊类型的类的实例指派给另一个类的属性。如下:

class A(object):     #这是一个描述器类
    def __get__(self, instance, owner):    #默认有一个返回值,如果没有他会返回零。
        print('getting...',self,instance,owner)
#self是指A的实例对象,instance是指A实例化对象所在的类的实例对象即下面text,owner是指A类本身。
    def __set__(self, instance, value):
        print('setting...',self,instance,value)

    def __delete__(self, instance):
        print('deleting...',self,instance)

class Text(object):
    x = A()   #实例化类,x作为Text的一个属性了,

test = Text()
print(test.x)
print(A())
print(test)
print(Text)

运行结果:
getting... <__main__.A object at 0x000002906CE30668> <__main__.Text object at 0x000002906CE30588> <class '__main__.Text'>
0
<__main__.A object at 0x000002906CE309E8>     #描述符本身的一个实例
<__main__.Text object at 0x000002906CE30588>  #TEXT的实例即拥有者类的实例
<class '__main__.Text'>    #拥有者类本身

描述符有以下三个属性:
get(self,instance,owner):用于访问属性,返回属性的值,当你进行访问时,自动调用。
set(self,instance,value):将在属性中分配操作中调用,不返回任何内容,当你进行赋值时,自动调用。
delete(self,instance):控制删除操作,不返回任何内容,当你进行删除时,自动调用。

在我们学习描述器之前,大家应该都知道property(fget= None,fset= None,fdel =Node,doc =Node)属性,
其实他就是一个描述器。

描述器练习

#摄氏度和华氏度之间的相互转换
class Celsius(object):    #定义一个摄氏度的类
    def __init__(self, cel=0):   #初始化
        self.value = cel     

    def __get__(self, instance, owner):
        return self.value   #get是默认有一个返回值,我们修改后返回访问属性所对应的值。

    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 Temperature:
    cel = Celsius()
    fah = Fahrenheit()

temp  = Temperature()
temp.cel = 30
print(temp.fah)
temp.fah = 40
print(temp.cel)

运行结果:
86.0
4.444444444444445
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-08 10:40:50  更:2021-09-08 10:42:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:25:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码