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

Python的描述符

1、描述符的定义  描述符是与特定属性互相绑定的一种协议,通过方法被触发修改属性,这些方法包括__get__(),__set__(),__delete__().将这些方法定义在类中,即可实现描述符...2、属性与__dict__ Python中类有属于自己的字典属性,经过类的实例化的对象也同样有自己的字典属性,__dict__ 1 class Foo(object): 2 x=10 3...Foo类中的三个方法,t为Test实例化的对象,触发构造方法init,执行self.x=y(10),实际类属性与实例新增属性x是井水不犯河水,无相关联,但是类属性x是描述符属性,被Foo代理,python...这涉及到优先级的顺序问题,当解释器发现实例字典中有与描述符属性同名的属性时,描述符优先与实例属性,会覆盖掉实例属性。可以通过类字典验证 1 print(Test....6、描述符优先级别顺序 上面已经提到,当无set方法的描述符称为非数据描述符,有set和get为数据描述符。这2者有啥区别?优先级别的大区别!!!

53020

Python描述符的使用

Python描述符的使用 前言 作为一位python的使用者,你可能使用python有一段时间了,但是对于python中的描述符却未必使用过,接下来是对描述符使用的介绍 场景介绍 为了引入描述符的使用,...使用描述符 首先看一下描述符的概念 描述符就是一个“绑定行为“的对象属性,在描述符协议中,它可以通过方法充写属性的访问。...然后因为是描述符,于是会执行描述符中的set特殊方法。...相关属性的查找顺序可以参考https://www.cnblogs.com/Jimmy1988/p/6808237.html 描述符中的set特殊方法的参数有为 self :是描述符实例 instance...最后,本文是对描述符的使用做了简单的介绍与讲解,如需更加深入了解可以参考《流畅的Python》属性描述符部分 ​

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

    Python描述符(上)

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

    39450

    Python描述符(下)

    前言 上节课我们讲解了描述符的概念和使用,其实,除了上次定义类(__get__,__set__,__delete__)这种描述符方式外,还有其他两种设置描述符的方式,这节课我们就来一起学习吧。...property函数 这种写法使用的并不是很多,我们定义好获取、设置和删除属性的方法,把他们传入到property函数中即可。...User() print(user.age) user.age = -1 0 ValueError: 年龄必须大于等于0 property装饰器 最后一种方法是使用property装饰器,装饰器下的age...函数,其实就是管理age属性的,然后通过setter和deleter分别设置和删除属性。...def age(self): pass user = User() print(user.age) user.age = -1 0 ValueError: 年龄必须大于等于0 今天的分享就到这了

    35110

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

    blog:http://ipytlab.com github:https://github.com/PytLab ❈—— 前言 最近使用描述符对自己的催化动力学模拟程序进行了改进,在Python描述符的帮助下实现了更加灵活而且强大有效的属性管理...本文就以自己程序中运用描述符来进行有效的python属性管理为例子,介绍python中描述符的概念以及如何更好的使用描述符这个强有力的工具帮助我们有效管理python程序中的数据访问控制。...这时候就要召唤Python的描述符机制了,他的存在是python开发者能够复用与属性相关的逻辑。 描述符协议 Python描述符协议是一种再模型中引用属性时将要发生事件的方法。...Python会对属性的访问操作进行一定的转译,这种转译的方式就是由描述符协议确定的。借助Python提供给我们的描述符协议,我们就可以用来以Python的方式实现与私有变量类似的功能。...总结 本文总结了Python中的描述符相关的概念和使用,描述符可以帮助我们实现强大而灵活的属性管理,通过结合使用描述符可以实现优雅的编程,但是同时也应该保持谨慎的态度,避免由于覆盖普通对象行为而产生不必要的代码复杂性

    81990

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

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

    37930

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

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

    45020

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

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

    40330

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

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

    63730

    python学习笔记6.5-类中描述符的使用

    之后,底层的实例字典会根据需要适当的进行调整。 要使用一个描述符,首先要创建一个描述符类,然后把描述符的实例放在类的定义中作为类变量来使用。...(这就是python描述符运行机制,不好理解,但一定要多读去记住,很快就会理解) 对于大多数python类的特性,描述符都提供了底层的魔法,包括@classmethod、 @staticmethod...如果以类变量的形式访问描述符,参数instance应该设为None。 这种情况下,标准的做法就是简单的返回描述符实例本身。...描述符常常作为一个组件出现在大型的编程框架中,其中还会涉及装饰器或者元类。正因为如此,对于描述符的使用可能隐藏很深,几乎看不到痕迹。...对于这样的任务,使用@property函数更加简单。针对于大量重用的代码的情况下,使用描述符更加有用(例如,我们需要在自己的代码中大量使用描述符提供的功能,或者将其作为库来使用)

    67290

    几个小例子给你讲解Python中类的描述符

    学习 Python 这么久了,说起 Python 的优雅之处,能让我脱口而出的, Descriptor(描述符)特性可以排得上号。...描述符是Python 语言独有的特性,它不仅在应用层使用,在语言的基础设施中也有涉及。...也就体会不到 Python 给我们带来的便利与优雅。 由于描述符的内容较多,长篇大论,容易让你倦怠,所以我打算分几篇来讲。 今天的话题是:为何要使用描述符?...我建议你去了解一下 Python 的描述符。 经过主管的指点,你知道了「描述符」这个东西。怀着一颗敬畏之心,你去搜索了下关于描述符的用法。 其实也很简单,一个实现了 描述符协议 的类就是一个描述符。...以上,我举了下具体的实例,从最原始的编码风格到 Property ,最后引出描述符。由浅入深,一步一步带你感受到描述符的优雅之处。

    79220

    中断描述符表

    CPU在接收到中断时,会根据中断向量在中断描述符表中检索对应的描述符。 中断描述符表中的描述符有哪些类型?...中断描述表中的主要包含以下类型: 任务门描述符 中断门描述符 陷阱门描述符 调用门描述符 任务门描述符结构如下: 任务门需要和任务状态段(TSS)配合使用,这是Intel处理器在硬件一级提供的任务切换机制...调用门描述符结构如下: 调用门是用户进程用来进入0特权级的方式,其DPL为3。调用门可以在GDT和IDT中存在的,只能使用call和jmp指令调用。 中断描述符表存储的位置不固定。...每个中断描述符号占用8字节,所以使用中断向量号与8相乘,相当于得到偏移地址,然后从IDTR寄存器中取出中断描述符表的基址,将两个地址相加,便能定位到中断描述符的地址。...对于内部中断来说,要求检查当前特权级CPL和中断门描述符DPL及门描述符对应的的代码段的DPL,在数值上满足以下关系: 目标代码段DPL 描述符DPL 对于外部中断,检查当前特权级

    82240

    文件描述符限制

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

    1.8K20

    全局描述符表

    什么是段描述符 全局描述符表记录各个段的信息,那么各个段的信息又存储在什么位置?其实各个段的信息便是使用段描述符来记录。...段描述符的具体结构如下: ?...在创建新的段描述符此位默认应该置0 DPL:高32位中的13~14位(共2位),表示描述符特权级,特权级的数字越小,特权级越大。...由于段寄存器是16位,因此选择子的大小也为16位,段选择子的低2位含义是请求特权级(RPL);第3位TI如果为0表示从GDT中查找段描述符,如果为1表示在局部描述符表(LDT)中查找段描述;剩余的13位用来索引描述符...,2的13次方为8192,因此索引描述符最多可以查找8192个段,和GDT中可容纳的最大段描述符数量一致。

    99450
    领券