首页 > 其他分享 >高端玩法之描述符的应用,描述符的优先级

高端玩法之描述符的应用,描述符的优先级

时间:2024-08-05 10:50:00浏览次数:12  
标签:__ 优先级 name self 玩法 描述符 key age

什么是描述符,故名思义就是用来描述一个对象的。你记住一个概念,在python中一切皆对象(Linux中一切皆文件)。所以类也是一个对象,描述符本身也是一个类,这个类是用来描述另外一个类的。
语法特点:描述的是另一个类属性,注意只能是类的属性,不可以加在构造函数中(__init__就是构造函数)。
描述符有三个重要方法: __get__ 、 __set__ 、 __delete__ --- 注意:还有个__del__方法,那是析构函数。

描述符的优先级:
类属性方法 > 数据描述符 > 对象属性方法 > 非数据描述符 > 不存在

数据描述符:描述符类中至少包含__get__和__set__方法中的一个
非数据描述符:描述符类中不包含__set__方法

举个例子,用Typed类描述People的类属性name,描述什么呢?就是对输入的name和age的数据类型做个判断。

class Typed:
    def __init__(self,key,owner_type):
        self.key=key
        self.owner_type=owner_type
    def __get__(self, instance, owner):
        return instance.__dict__[self.key]
    def __set__(self, instance, value):
        if not isinstance(value,self.owner_type):
            raise TypeError('%s输入的类型不是%s' %(self.key,self.owner_type))
        instance.__dict__[self.key]=value
    def __delete__(self, instance):
        return instance.__dict__.pop(self.key)

class People:
    name=Typed('name',str)
    age=Typed('age',int)
    def __init__(self,name,age,gender):
        self.name=name
        self.age=age
        self.gender=gender

p = People('jack',20,'男')
print(p.name)
print(p.__dict__)
del p.name
print(p.__dict__)

输出结果:
D:\python\python.exe D:/software/project/描述符.py
jack
{'name': 'jack', 'age': 20, 'gender': '男'}
{'age': 20, 'gender': '男'}

Process finished with exit code 0

特别说明:描述符一般用不到,有的人工作好多年可能都用不到描述符,这是个很高端的东西,一般用在写大型框架上面,架构师的水平才会用到。

标签:__,优先级,name,self,玩法,描述符,key,age
From: https://www.cnblogs.com/kkbest/p/18342197

相关文章

  • 【C++从小白到大牛】栈和队列(优先级队列)
    目录引言:使用方法篇:stack:queuepriority_queue使用方法:模拟实现篇:stack:原码:queue原码:priority_queue插入和删除数据的思想:仿函数实现比较原码:引言:本文主要讲解C++STL库中stack、queue、priority_queue的使用方法和模拟实现。我们首先需要对stack、queue进......
  • 优先级翻转问题(转)
    前面提到了二值信号量的概念,但是在多个不同优先级的任务想要同时Take和Give二值信号量时,往往会因为被占用的问题,使得高优先级任务的执行顺序与低优先级任务一样。这种情况被称为优先级翻转,优先级翻转在可剥夺内核中是非常常见的,在实时系统中不允许出现这种现象,这样会破坏任务的预......
  • 【嵌入式之RTOS】什么是优先级反转
            优先级反转(PriorityInversion)是实时操作系统(RTOS)中一个常见的问题,特别是在采用优先级调度算法的系统中。这个问题通常发生在多个任务共享一个资源(如一个互斥锁或信号量)时,低优先级的任务意外地阻塞了高优先级的任务。什么是优先级反转?        想象......
  • C语言运算符优先级口诀
    口诀内容(优先级自上而下递减;由逗号分隔的,优先级自左到右递减。)圆方括号,箭头句号。单目增减非反负,针强址长,从右。乘除求模,加减,位移,大小,等不等。位与异或,逻辑与或。条件赋值均右。真逗。解释(斜体字是补全;加粗字是对整行的说明;代码块即是所对应操作符。)圆括号()方括号[]......
  • C语言运算符优先级口诀
    口诀内容(优先级自上而下递减;由逗号分隔的,优先级自左到右递减。)圆方括号,箭头句号。单目增减非反负,针强址长,从右。乘除求模,加减,位移,大小,等不等。位与异或,逻辑与或。条件赋值均右。真逗。解释(斜体字是补全;加粗字是对整行的说明;代码块即是所对应操作符。)圆括号()方括号[]......
  • 【Linux进程理解】| 冯诺依曼体系结构 | 操作系统 | 进程理解 | 状态 | 优先级
    本文目录【写在前面】一、冯•诺依曼体系结构......
  • 对于泛型和类型转换的优先级
    你们猜猜谁先打印,不看答案,能猜出来吗,写在评论区下面有3道题目,分别写出答案在评论区1、classTest{publicstaticvoidMain(){Foo("Hello");}publicstaticvoidFoo(objectx){Console.WriteLine("object");......
  • 数据类型之间的优先级
    数据类型之间的优先级在Java中,数据类型确实有优先级和大小的概念。这主要影响运算时的类型提升规则,以及在进行类型转换时的规则。以下是Java基本数据类型的大小和优先级:大小byte:8位,-128到127short:16位,-32,768到32,767int:32位,-2^31到2^31-1long:64位,-2^63到2^63-......
  • C/C++ 运算符优先级相关的注意事项
    在C/C++中,运算符优先级决定了表达式中各部分的计算顺序。理解并正确应用运算符优先级是确保程序逻辑正确性的关键。以下是关于C/C++运算符优先级相关的一些重要注意事项:优先级层次:C/C++中的运算符按优先级从高到低排序。例如,算术运算符(+、-、*、/)的优先级高于赋值运算符(=)......
  • 运行期加载时共享库路径搜索优先级实验
    目录前言实验环境目录说明单独测试不配置路径默认路径ld.so.cacheRUNPATHLD_LIBRARY_PATHRPATH优先级测试附录库文件源码主程序源码makefile脚本run_nonerun_defaultrun_ld_so_cacherun_runpathrun_ld_library_pathrun_rpathrun_cmp_all前言《共享库链接和加载时的路径搜索优先......