首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python描述符(上)

描述符概念 我觉得要想了解描述符,理解这两个关键字即可。类,托管。 描述符本质上就是一个类,可以将其他类的属性托管给这个类(描述符)。...小试牛刀 类 描述符本质上是个类,那我们定义一个普通的类肯定不是描述符,只要有__get__,__set__,__delete__魔术方法之一的类就是描述符。...托管 我们来举一个简单的例子,来看看怎么把类属性托管给描述符。...,其中有__get__魔术方法;在A类中,我们将描述符赋值给类的x属性,这样x属性就被描述符托管了,当我们访问x属性时,就会触发描述符的get方法。...描述符方法 __get__魔术方法 上面的内容让我们了解了数据描述符,那现在我们再仔细的学习下描述符的各种方法和使用,首先是__get__方法。 触发时间:在访问对象成员属性的时候触发。

35950
您找到你想要的搜索结果了吗?
是的
没有找到

Python描述符

1、描述符的定义  描述符是与特定属性互相绑定的一种协议,通过方法被触发修改属性,这些方法包括__get__(),__set__(),__delete__().将这些方法定义在类中,即可实现描述符...2、属性与__dict__ Python中类有属于自己的字典属性,经过类的实例化的对象也同样有自己的字典属性,__dict__ 1 class Foo(object): 2 x=10 3...,被Foo代理,python解释器会发现实例字典中的x属性名与类属性同名,类属性(描述符)会优先覆盖。...当没有set方法,有其他2个任意或所有时,又被称为非数据描述符。至少有get和set,称为数据描述符 4、描述符对象是实例属性     从上述可知描述符对象是类属性。...6、描述符优先级别顺序 上面已经提到,当无set方法的描述符称为非数据描述符,有set和get为数据描述符。这2者有啥区别?优先级别的大区别!!!

50020

Python描述符的使用

Python描述符的使用 前言 作为一位python的使用者,你可能使用python有一段时间了,但是对于python中的描述符却未必使用过,接下来是对描述符使用的介绍 场景介绍 为了引入描述符的使用,...使用描述符 首先看一下描述符的概念 描述符就是一个“绑定行为“的对象属性,在描述符协议中,它可以通过方法充写属性的访问。...然后因为是描述符,于是会执行描述符中的set特殊方法。...对于数据描述符与非数据描述符,一个类,如果只定义了 get() 方法,而没有定义 set(), delete() 方法,则认为是非数据描述符; 反之,则成为数据描述符。...最后,本文是对描述符的使用做了简单的介绍与讲解,如需更加深入了解可以参考《流畅的Python》属性描述符部分 ​

45020

Python进阶——什么是描述符

Python 开发中,你可能听说过「描述符」这个概念,由于我们很少直接使用它,所以大部分开发人员并不了解它的原理。...但作为熟练使用 Python,想要进阶的你,建议还是了解一下描述符的原理,这也便于你更深层次地理解 Python 的设计思想。...其实,我们也可以直接利用 Python 描述符的特性来实现这些装饰器, property 的 Python 版实现: class property: def __init__(self, fget...由此可见,通过描述符我们可以实现强大而灵活的属性管理功能,对于一些要求属性控制比较复杂的场景,我们可以选择用描述符来实现。 总结 这篇文章我们主要讲了 Python 描述符的工作原理。...Python 描述符提供了强大的属性访问控制功能,我们可以在需要对属性进行复杂控制的场景中去使用它。

32330

关于 Python 描述符(Descriptor) 附实例

Python 众多原生特性中,描述符可能是最少被自定义实现的特性之一,很多初学者都可能不知道它的存在,但它在底层实现的方法和属性却随处可见,它优雅的实现方式充分体现出 Python 的简洁之美。...任何定义了 __get__, __set__ 或者 __delete__ 任一方法的类称为描述符类,其实例对象便是一个描述符,这些方法称为描述符协议。...当对一个实例属性进行访问时,Python 会按 obj.__dict__ → type(obj).__dict__ → type(obj)的父类....__dict__ 顺序进行查找,如果查找到目标属性并发现是一个描述符Python 会调用描述符协议来改变默认的控制行为。...__dict__ 中有与描述符同名的属性,若描述符是数据描述符,则优先调用描述符,若是非数据描述符,则优先使用 obj.__dict__ 中属性。

40620

Python学习之路40-属性描述符

《流畅的Python》笔记。 本篇主要讨论Python中的描述符,它是精通Python的关键。 1. 前言 描述符是对多个属性运用相同存取逻辑的一种方式。...本篇的内容包括:将上一篇中的特性工厂函数改为描述符类;重构并派生描述符子类;覆盖型描述符和非覆盖型描述符;非覆盖型描述符的典型代表:方法。 2...._Quantity#0的直接访问在Python中是无效的,因为注释也用的是#号,然而内置的getattr和setattr函数可以使用这种“无效的”标识获取和设置属性,此外也可以直接处理实例属性__dict...覆盖型与非覆盖型描述符 Python存取属性的方式并不是对等的:通过实例读取属性时,通常返回的是实例中定义的属性,如果没有这个属性,再到所属的类中去找;但为实例中的属性赋值时,通常会在实例中创建属性,根本不影响类...这也是非覆盖型描述符的一个具体类型,同时,这也说明了,Python语言的底层就用到了描述符类。

35630

Python描述符descriptor使用原理解析

描述符(descriptor)是实现了__get__、__set__、__del__方法的类,进一步可以细分为两类: 数据描述符:实现了__get__和__set__ 非数据描述符:没有实现__set...__ 描述符在类的属性调用中起着很重要的作用,类在调用属性时,遵守两个规则: 按照实例属性、类属性的顺序选择属性,即实例属性优先于类属性 如果在类属性中发现同名的数据描述符,那么该描述符会优先于实例属性...,当value属性是一个数据描述符时,它屏蔽了实例的同名属性value,实例对value属性的读取与赋值都会直接被转移到类属性value上。...总结 描述符是实现了__get__、__set__、__del__等特殊方法的类,在属性访问时起着很大的作用。 数据描述符会覆盖同名的实例属性,通过使用数据描述符,达到通过实例修改类变量的目的。...描述符用于修改属性的默认访问方式,借此可以实现类方法与静态方法。 以上就是本文的全部内容,希望对大家的学习有所帮助。

50751

Python 描述符是什么?以及如何实现

被@property修饰的成员函数,将变为一个描述符。这是最简单的创建描述符的方式。...此时可以给描述符一个简要定义: 描述符是类的一个属性,控制类实例对象访问这个属性时如何返回值及做哪些额外操作 这留给程序员的空间是巨大的。。...描述符协议 任何实现了描述符协议的类都可以作为描述符类。...None 否 __delete__(self, obj) 删除属性 None 否 如果一个类实现了以上成员函数,则它便是一个描述符类,其实例对象便是一个描述符 下面是一个自定义的描述符的实现。...参数意义 __get__(self, obj, type) 函数各个参数的意义为: 参数 意义 例子中的对应 self 描述符对象本身 Foo.attr obj 使用描述符的对象实例 foo type

61130

有效的python属性管理:描述符的使用

本文就以自己程序中运用描述符来进行有效的python属性管理为例子,介绍python描述符的概念以及如何更好的使用描述符这个强有力的工具帮助我们有效管理python程序中的数据访问控制。...这时候就要召唤Python描述符机制了,他的存在是python开发者能够复用与属性相关的逻辑。 描述符协议 Python描述符协议是一种再模型中引用属性时将要发生事件的方法。...Python会对属性的访问操作进行一定的转译,这种转译的方式就是由描述符协议确定的。借助Python提供给我们的描述符协议,我们就可以用来以Python的方式实现与私有变量类似的功能。...其实现的C代码参见:https://hg.python.org/cpython/file/3.5/Objects/typeobject.c#l2936 描述符优先级 首先,描述符描述符之间也是有区别的...总结 本文总结了Python中的描述符相关的概念和使用,描述符可以帮助我们实现强大而灵活的属性管理,通过结合使用描述符可以实现优雅的编程,但是同时也应该保持谨慎的态度,避免由于覆盖普通对象行为而产生不必要的代码复杂性

77390

类型描述符

例如Thread的类名叫java.lang.Thread,但是在class文件格式的描述符中使用的内部格式,对Thread类名称utf8的引用却是:java/lang/Thread 不信我们随便打开一个...class文件 可以看到类似的描述符 那如何获取类的描述符呢?...首先,基本类型描述符,都是以ASCII字符表示,例如L 正斜杠类名;表示对象类型,[表示数组类型 我们可以在sun.invoke.util.Wrapper下看到对应枚举常量 例如: int的描述符为...I Integer的描述符为Ljava/lang/Integer; void的描述符为V java.lang.Void的描述符为Ljava/lang/Void; Object的描述符为...Ljava/lang/Object; double d[][][]的描述符为[[[D 然后方法描述符的规则是: (参数描述符们)返回值描述符 例如: 这样一个方法: Object m(int

44740

文件描述符限制

文件描述符限制 文件描述符 Linux的核心思想之一就是”一切皆文件”。...文件描述符(文件句柄)是Linux内核为了高效管理已被打开的文件所创建的索引,它是一个非负整数,用于指代被打开的文件。文件打开后,所有对该文件的操作都通过文件描述符进行操作。...文件描述符是系统的重要资源,当打开过多文件时会出现把系统内存耗尽的情况,所以Linux提供了多种维度对文件描述符的使用上限进行限制,以避免该问题。...文件描述符限制 file-max file_max用于限制整个系统能够分配的文件描述符,即当前系统下所有用户下的所有进程,其分配的所有文件描述符之和不能超过该值。...,第一个(6144)是系统已经分配的文件描述符数;第二个(0)是系统已经分配但未使用的文件描述符数;第三个是内核最大能分配的文件描述符数,与file-max一致。

1.7K20

中断描述符

Hi~朋友,码字不易,点点关注呗 摘要 中断描述符表 中断描述符寄存器 中断细节 中断错误码 中断描述符表 什么是中断描述符表? 中断描述符表是保护模式下用于存储中断处理程序的数据结构。...CPU在接收到中断时,会根据中断向量在中断描述符表中检索对应的描述符。 中断描述符表中的描述符有哪些类型?...中断描述表中的主要包含以下类型: 任务门描述符 中断门描述符 陷阱门描述符 调用门描述符 任务门描述符结构如下: 任务门需要和任务状态段(TSS)配合使用,这是Intel处理器在硬件一级提供的任务切换机制...任务门可以存在于全局描述符GDT、局部描述符表LDT以及中断描述符表IDT中。...中断描述符寄存器 如何找到中断描述符表?

71240

全局描述符

Hi~朋友,码字不易,点点关注呗 摘要 什么是全局描述符表 什么是段描述符 GDTR寄存器 段选择子 什么是全局描述符表 进入保护模式以后,数据段、代码段等内存段不再是通过段寄存器获得段基址就可以使用,...什么是段描述符 全局描述符表记录各个段的信息,那么各个段的信息又存储在什么位置?其实各个段的信息便是使用段描述符来记录。...因此段描述符中除了记录了段的基址以外还有一些额外字段来保证安全。 段描述符的具体结构如下: ?...在创建新的段描述符此位默认应该置0 DPL:高32位中的13~14位(共2位),表示描述符特权级,特权级的数字越小,特权级越大。...,2的13次方为8192,因此索引描述符最多可以查找8192个段,和GDT中可容纳的最大段描述符数量一致。

89250
领券