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

对非类属性使用Python的__get__描述符

是指在Python中,通过自定义描述符的方式来对非类属性进行访问和操作。

描述符是一种特殊的类,它定义了getsetdelete等方法,用于控制对属性的访问和操作。get方法在访问属性时被调用,set方法在设置属性时被调用,delete方法在删除属性时被调用。

对于非类属性,即在类的实例中定义的属性,可以使用get描述符来实现对其访问的控制。通过在类中定义一个描述符类,并将其作为实例属性的值,可以在访问该属性时触发描述符的get方法。

使用get描述符可以实现对非类属性的计算、验证、限制等操作。例如,可以在get方法中对属性进行计算,返回计算结果;也可以在get方法中对属性进行验证,确保其符合一定的规则。

以下是一个示例代码,演示了如何对非类属性使用get描述符:

代码语言:txt
复制
class Descriptor:
    def __get__(self, instance, owner):
        # instance为实例对象,owner为类对象
        # 在这里可以对属性进行访问和操作
        return instance._value  # 返回属性的值

class MyClass:
    descriptor = Descriptor()

    def __init__(self, value):
        self._value = value

obj = MyClass(10)
print(obj.descriptor)  # 输出:10

在上述代码中,Descriptor类是一个描述符类,定义了get方法。MyClass类中的descriptor属性的值为Descriptor类的实例。当访问obj.descriptor时,会触发Descriptor类的get方法,返回obj._value的值。

对于非类属性使用get描述符的优势在于可以对属性的访问进行灵活的控制和操作,增加了代码的可维护性和可扩展性。它可以用于实现属性的延迟加载、属性的缓存、属性的动态计算等功能。

对于非类属性使用get描述符的应用场景包括但不限于:

  • 对属性进行计算或验证,确保属性的有效性和一致性。
  • 实现属性的懒加载,延迟加载属性的值,提高性能。
  • 实现属性的缓存,避免重复计算,提高访问速度。
  • 实现属性的动态计算,根据其他属性的值来计算当前属性的值。

腾讯云相关产品中与描述符相关的产品和服务可能包括但不限于:

  • 云函数(Serverless Cloud Function):提供事件驱动的无服务器计算服务,可以用于实现属性的动态计算和处理。
  • 云数据库(TencentDB):提供高性能、可扩展的数据库服务,可以用于存储和管理属性的数据。
  • 云存储(COS):提供安全可靠的对象存储服务,可以用于存储和管理属性的文件和数据。

请注意,以上仅为示例,具体的产品和服务选择应根据实际需求和情况进行评估和选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

blog:http://ipytlab.com github:https://github.com/PytLab ❈—— 前言 最近使用描述符对自己的催化动力学模拟程序进行了改进,在Python描述符的帮助下实现了更加灵活而且强大有效的属性管理...本文就以自己程序中运用描述符来进行有效的python属性管理为例子,介绍python中描述符的概念以及如何更好的使用描述符这个强有力的工具帮助我们有效管理python程序中的数据访问控制。...但是在Python中我们一般都是直接从public属性写起,但是当我们对属性有特殊需求,例如进行类型验证(Python是动态类型),数值范围检测,返回深复制(而不是引用)的时候,我们一般会考虑使用: 内建的...如果一个对象只定义了__get__()方法,则这个描述符被称为non-data descriptor 我们对属性进行访问的时候需要几行打交道的基本上包含这几个对象: 1. data descriptor...总结 本文总结了Python中的描述符相关的概念和使用,描述符可以帮助我们实现强大而灵活的属性管理,通过结合使用描述符可以实现优雅的编程,但是同时也应该保持谨慎的态度,避免由于覆盖普通对象行为而产生不必要的代码复杂性

81990

Python描述符的使用

Python描述符的使用 前言 作为一位python的使用者,你可能使用python有一段时间了,但是对于python中的描述符却未必使用过,接下来是对描述符使用的介绍 场景介绍 为了引入描述符的使用,...,然后在之后对类的实例的属性进行赋值的时候还是无法保证赋的值是大于0 的 于是我们可以使用‘特性’来解决这个问题: class Product(): def __init__(self,name...但是当一个类中有更多的属性,很多属性同样需要添加非负数赋值的检查的时候,使用特性这种方式就会显得过于累赘,会有很多的代码重复,也会添加很多装饰器,这时就可以使用描述符来解决这个问题。...使用描述符 首先看一下描述符的概念 描述符就是一个“绑定行为“的对象属性,在描述符协议中,它可以通过方法充写属性的访问。...最后,本文是对描述符的使用做了简单的介绍与讲解,如需更加深入了解可以参考《流畅的Python》属性描述符部分 ​

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

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

    45020

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

    在 Python 开发中,你可能听说过「描述符」这个概念,由于我们很少直接使用它,所以大部分开发人员并不了解它的原理。...但作为熟练使用 Python,想要进阶的你,建议还是了解一下描述符的原理,这也便于你更深层次地理解 Python 的设计思想。...Ten 中定义了一个 __get__ 方法,返回具体的值。 在 Python 中,允许把一个类属性,托管给一个类,这个属性就是一个「描述符」。 换句话说,「描述符」是一个「绑定行为」的属性。...:数据描述符、实例属性、非数据描述符、类属性 如果我们重写了 __getattribute__ 方法,会阻止描述符的调用 所有方法其实都是一个非数据描述符,因为它定义了 __get__ 描述符的使用场景...Python 描述符提供了强大的属性访问控制功能,我们可以在需要对属性进行复杂控制的场景中去使用它。

    37930

    python的__get__、__set

    函数和方法         静态方法和类方法 摘要     定义并展示如何调用描述符,展示自定义描述符和几个内置的python描述符,包括函数、属性、静态方法和类方法,通过给出一个Python的示例应用来展示描述符是如何工作的...熟练掌握描述符不仅让你拥有python使用的额外技巧,并且可以加深对Python内部如何工作的理解,提升对程序设计的能力,而且体会到python的设计优雅之处 定义和介绍     一般来说,描述符是带有...__() 和 __set__(),它被认为是一个数据描述符.只定义 __get__()被认为是非数据描述符,数据和非数据描述符的区别在于:如果一个实例的字典有和数据描述符同名的属性,那么数据描述符会被优先使用...,如果一个实例的字典实现了无数据描述符的定义,那么这个字典中的属性会被优先使用,实现只读数据描述符,同时定义__get__()和__set__(),在__set__()中抛出AttributeError...__getattribute__()对__get__()的调用不一样         数据描述符会重载实例字典         非数据描述符可能会被实例字典重载      super()返回的对象会使用定制

    1.3K20

    这个 Python 知识点,90% 的人都得挂~

    描述符 是Python 语言独有的特性,它不仅在应用层使用,在语言语法糖的实现上也有使用到(在下面的文章会一一介绍)。 当你点进这篇文章时 你也许没学过描述符,甚至没听过描述符。...或者你对描述符只是一知半解 无论你是哪种,本篇都将带你全面的学习描述符,一起来感受 Python 语言的优雅。 1. 为什么要使用描述符?...没想到,人外有天,你的主管看了你的代码后,深深地叹了口气:类里的三个属性,math、chinese、english,都使用了 Property 对属性的合法性进行了有效控制。...如果实例字典中有与描述符同名的属性,如果描述符是数据描述符,优先使用数据描述符,如果是非数据描述符,优先使用字典中的属性。 这边还是以上节的成绩管理的例子来说明,方便你理解。...我想你应该对描述符在 Python 中的应用有了更深的理解。对于 super 的实现原理,就交由你来自己完成。 6.

    48720

    这个 Python 知识点,90% 的人都得挂

    描述符 是Python 语言独有的特性,它不仅在应用层使用,在语言语法糖的实现上也有使用到(在下面的文章会一一介绍)。 当你点进这篇文章时 你也许没学过描述符,甚至没听过描述符。...或者你对描述符只是一知半解 无论你是哪种,本篇都将带你全面的学习描述符,一起来感受 Python 语言的优雅。 1. 为什么要使用描述符?...没想到,人外有天,你的主管看了你的代码后,深深地叹了口气:类里的三个属性,math、chinese、english,都使用了 Property 对属性的合法性进行了有效控制。...如果实例字典中有与描述符同名的属性,如果描述符是数据描述符,优先使用数据描述符,如果是非数据描述符,优先使用字典中的属性。 这边还是以上节的成绩管理的例子来说明,方便你理解。...我想你应该对描述符在 Python 中的应用有了更深的理解。对于 super 的实现原理,就交由你来自己完成。 6.

    47230

    Python 基础:类与函数

    MRO __slots__ 子类没有__slots__属性 子类拥有__slots__属性 2.2 总结: 本文介绍了Python中的继承,当使用多继承的时候,可以使用super...另外介绍了Python类的__slots__属性,通过这个属性可以限制类实例的可用属性。...Refer:http://python.jobbole.com/82312/ 4、Python 中 self 的含义 self代表类的实例,而非类 self不必非写成self self可以不写吗...Refer:http://python.jobbole.com/81921/ 5、Python 描述符 描述符协议中定义了“__get__”、“__set__”、”__delete__” 这些特殊方法...type实际上是它自己的元类,在纯Python环境中这可不是你能够做到的,这是通过在实现层面耍一些小手段做到的。其次,元类是很复杂的。对于非常简单的类,你可能不希望通过使用元类来对类做修改。

    94690

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

    大家好,又见面了,我是你们的朋友全栈君。 《流畅的Python》笔记。 本篇主要讨论Python中的描述符,它是精通Python的关键。 1. 前言 描述符是对多个属性运用相同存取逻辑的一种方式。...__dict__["weight"],即用户直接操作了__dict__;使用了描述符后,对__dict__的操作由描述符接管:“你自己操作不安全,告诉我(描述符)你要做什么,我来给你操作”。...:Food类使用了描述符实例weight和price作为类属性,所以它是托管类;前面用到的f就是托管实例; 托管属性:在使用Food或Test的实例时,如果不知道这两个类的定义,那么在调用f.weight...在__get__和__set__方法中,我们并没有直接操作__dict__,因为这里的储存属性和描述符实例不会重名,所以不会产生无限递归,可以使用内置的getattr()和setattr()函数。..._Quantity#0的直接访问在Python中是无效的,因为注释也用的是#号,然而内置的getattr和setattr函数可以使用这种“无效的”标识获取和设置属性,此外也可以直接处理实例属性__dict

    40330

    Python的描述符

    1、描述符的定义  描述符是与特定属性互相绑定的一种协议,通过方法被触发修改属性,这些方法包括__get__(),__set__(),__delete__().将这些方法定义在类中,即可实现描述符...2、属性与__dict__ Python中类有属于自己的字典属性,经过类的实例化的对象也同样有自己的字典属性,__dict__ 1 class Foo(object): 2 x=10 3...Foo类所代理一般,涉及对x属性的操作可能会触发Foo类中的三个方法,t为Test实例化的对象,触发构造方法init,执行self.x=y(10),实际类属性与实例新增属性x是井水不犯河水,无相关联,但是类属性...x是描述符属性,被Foo代理,python解释器会发现实例字典中的x属性名与类属性同名,类属性(描述符)会优先覆盖。...第19行对x的属性访问,理所应当,触发其代理的get方法,self——类Foo类的信息,instance——被代理的对象信息,owner——见名知意,被代理属性的最高拥有着,即Test类 其实当一个类中定义了

    53020

    python 属性描述符

    描述符用法建议 learn from 《流畅的python》 1....描述符示例:验证属性 描述符是对多个属性 运用 相同存取逻辑的一种方式 描述符是实现了 特定协议 的类,这个协议包括 __get__、__set__ 和 __delete__ 方法 property...——管理 数据属性 这种描述符也叫覆盖型描述符,因为描述符的 __set__ 方法使用托管实例中的同名属性覆盖(即插手接管)了要设置的属性 4....如果设置了同名 的实例属性,描述符会被遮盖,致使描述符 无法处理 那个实例的那个属性 # obj.non_over 触发描述符的 __get__ 方法,第二个参数的值是 obj obj.non_over...描述符用法建议 创建只读属性最简单的方式是 使用特性 property 使用 描述符类 实现只读属性,要记住,__get__ 和 __set__ 两个方法必须都定义,否则,实例的同名属性会遮盖描述符 用于

    40110

    让Python中类的属性具有惰性求值的能力

    为什么会这样 如果类中定义了 __get__()、__set__() 、__delete__() 中的任何方法,那么这个就被成为描述符(descriptor)。...这里就只说明例子中的情况。 如果描述符绑定的对象实例,a.x 则转换为调用: type(a).__dict__['x'].__get__(a, type(a))。...当一个描述符之定义 __get__() 方法,则它的绑定关系比一般情况下要弱化很多。特别是,只有当被访问的属性不存在对象字典中时,__get__() 才会被调用。...__get__ 这种惰性求值的方法在很多模块中都会使用,比如django中的 cached_property: 使用上与例子一致,如表单中的 changed_data : 讨论 在大部分情况下,让属性具有惰性求值能力的全部意义就在于提升程序性能...投稿邮箱:pythonpost@163.com 欢迎点击申请成为专栏作者:Python中文社区新专栏作者计划 Python中文社区作为一个去中心化的全球技术社区,以成为全球20万Python中文开发者的精神部落为愿景

    1.5K40

    Python描述符(__get__和__set__和__delete__)

    一、描述符 描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()中的一个,这也被称为描述符协议 __get__():调用一个属性时...,触发 __set__():为一个属性赋值时,触发 __delete__():采用del删除属性时,触发 定义一个描述符 class Foo: # 在python3中Foo是新式类,它实现了__get...描述符是干什么的:描述符的作用是用来代理另外一个类的属性的,必须把描述符定义成这个类的类属性,不能定义到构造函数中 class Foo: def __get__(self, instance,...() 五、使用描述符 众所周知,python是弱类型语言,即参数的赋值没有类型限制,下面我们通过描述符机制来实现类型限制功能 1 牛刀小试 class Str: def __init__(self...描述符是可以实现大部分python类特性中的底层魔法,包括@classmethod,@staticmethd,@property甚至是slots属性 描述父是很多高级库和框架的重要工具之一,描述符通常是使用到装饰器或者元类的大型框架中的一个组件

    65110

    觉得 Python 太“简单了”,这些题你能答对几个?

    描述符赛高 大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!...答案是,很明显不得行啊,至于为什么,就涉及到我们 Python 描述符的机制了,描述符指的是实现了描述符协议的特殊的类,三个描述符协议指的是 __get__ , ‘set‘ , __delete__ 以及...其中如果在类实例字典中的该属性是一个 Data descriptors ,那么无论实例字典中存在该属性与否,无条件走描述符协议进行调用,在类实例字典中的该属性是一个 Non-Data descriptors...,那么优先调用实例字典中的属性值而不触发描述符协议,如果实例字典中不存在该属性值,那么触发 Non-Data descriptor 的描述符协议。...第二种:在 Python 3.6 中,实现的 PEP 487 提案,为描述符新增加了一个协议,我们可以用其来绑定对应的对象: class Grad(object): def __get__(self

    37840

    流畅的 Python 第二版(GPT 重译)(十二)

    使用属性或描述符比定义这些特殊方法更不容易出错。 这结束了我们对属性、特殊方法和其他编写动态属性技术的探讨。 章节总结 我们通过展示简单类的实际示例来开始动态属性的覆盖。...他们只用了三页来讨论属性,但这是因为该书遵循了公理化的展示风格:前面的 15 页左右提供了对 Python 类语义的彻底描述,包括描述符,这是属性在幕后实际上是如何实现的。...这样,从实例中读取具有相同名称的属性将尽可能快,因为它不需要__get__。查看示例 23-3 的代码。 使用__get__可以高效地进行缓存 如果只编写 __get__ 方法,则具有非覆盖描述符。...这些对于进行一些昂贵的计算然后通过在实例上设置同名属性来缓存结果很有用。⁹ 同名实例属性将遮蔽描述符,因此对该属性的后续访问将直接从实例 __dict__ 中获取,而不再触发描述符 __get__。...这可以通过在描述符类中实现__delete__方法来完成,而不是通常的__get__和/或__set__。我故意省略了对__delete__的覆盖,因为我认为实际使用是罕见的。

    13610

    Python 面向对象 高阶-描述符与设计模式#学习猿地

    ## 描述符 > 当一个类中,包含了三个魔术方法(`__get__,__set__,__delete__`)之一,或者全部时,那么这个类就称为描述符类 ### 作用 > 描述符的作用就是对一个类中的某个成员进行一个详细的管理操作...(获取,赋值,删除) > 描述符就是代理了一个类中的成员的操作,描述符属于类,只能定义为类的属性 ### 三个魔术方法 ```python ''' __get__(self, instance, owner...) 触发机制:在访问对象成员属性时自动触发(当该成员已经交给描述符管理时) 作用:设置当前属性获取的值 参数:1. self 描述符对象 2.被管理成员的类的对象。...### 基本使用格式 > 把当前的描述符类赋值给一个需要代理的类中的成员属性 代码示例: ```python # 定义描述符类 class PersonName(): __name = 'abc...可以思考使用描述符来代理我们的分数这个属性 1.定义Score描述符类 2.把学生类中的score这个成员交给描述符类进行代理 3.只要在代理的描述符类中对分数进行赋值和获取就

    31810

    python高级之描述器

    如果仅实现了__get__,就是非数据描述符 non-data descriptor 同时实现了除__get__以外的__set__或__delete__方法,就是数据描述符 data descriptor...如果一个类的类属性设置为描述器,那么它被称为此描述器的owner属主 描述器方法何时被触发:     当属主类中对是描述器的类属性进行访问时(即类似b.x),__get__方法被触发     当属主类中对是描述器的实例属性通过...__的属性名清空,从而达到数据描述器优先于查实例字典的假象 Python中的描述器 描述器在Python中应用非常广泛 Python的方法(包括staticmethod()和classmethod()...上述实现的拦截地方:         在类初始化时,在对实例属性赋值之前拦截         使用装饰器,和inspect模块,在实例化之前进行参数检查         使用描述器,在初始化时对实例属性设置时...,触发描述器的__set__方法,在__set__方法中进行参数检查,再对其实例的类添加类属性             (如果添加在实例上,则会递归调用回到__set__方法)         使用装饰器获取参数注解

    41030

    Python 面向对象 高阶-描述符与设计模式#学习猿地

    ## 描述符 > 当一个类中,包含了三个魔术方法(`__get__,__set__,__delete__`)之一,或者全部时,那么这个类就称为描述符类 ### 作用 > 描述符的作用就是对一个类中的某个成员进行一个详细的管理操作...(获取,赋值,删除) > 描述符就是代理了一个类中的成员的操作,描述符属于类,只能定义为类的属性 ### 三个魔术方法 ```python ''' __get__(self, instance, owner...) 触发机制:在访问对象成员属性时自动触发(当该成员已经交给描述符管理时) 作用:设置当前属性获取的值 参数:1. self 描述符对象 2.被管理成员的类的对象。...### 基本使用格式 > 把当前的描述符类赋值给一个需要代理的类中的成员属性 代码示例: ```python # 定义描述符类 class PersonName():     __name = 'abc...可以思考使用描述符来代理我们的分数这个属性         1.定义Score描述符类         2.把学生类中的score这个成员交给描述符类进行代理         3.只要在代理的描述符类中对分数进行赋值和获取就

    33810

    Python中反射和描述器总结

    函数与方法 内建函数: getattr(object,name[,degault])  通过name返回object的属性值,当属性不存在,将使用default返回,如果没有default,则抛出AttributeError...__dict__-->继承的祖先类(直到object)的__dict__---找不到--> 调用__getattr__() __setattr__() 可以拦截对实例属性的增加、修改操作,如果要设置生效...一般不使用该方法 魔术方法 __getattr__() 当通过搜索实例、实例的类及祖先类查不到属性,就会调用此方法 __setattr__() 通过.访问实例的属性,进行增加,修改都要调用它 __delattr...描述器: 描述器定义 在python中,一个类实现了__get__、__set__、__delete__三个方法中的任何一个方法,就是描述器。...如果仅实现了__get__,就是非数据描述符non-data descriptor 同时实现了__get__,__set__就是数据描述符 data descriptor 如果一个类的类属性设置为描述器实例

    92720
    领券