首页
学习
活动
专区
工具
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描述符相关概念和使用描述符可以帮助我们实现强大而灵活属性管理,通过结合使用描述符可以实现优雅编程,但是同时也应该保持谨慎态度,避免由于覆盖普通对象行为而产生不必要代码复杂性

80290

Python描述符使用

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

47420
  • 关于 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

    42920

    Python进阶——什么是描述符

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

    35530

    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.

    47920

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

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

    46230

    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环境中这可不是你能够做到,这是通过在实现层面耍一些小手段做到。其次,元类是很复杂。对于非常简单类,你可能不希望通过使用元类来类做修改。

    91990

    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

    39130

    python 属性描述符

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

    39510

    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类 其实当一个类中定义了

    52220

    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属性 描述父是很多高级库和框架重要工具之一,描述符通常是使用到装饰器或者元类大型框架中一个组件

    60110

    觉得 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

    37240

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

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

    13010

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

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

    30810

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

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

    32610

    python高级之描述器

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

    40230

    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 如果一个类属性设置为描述器实例

    91720

    Python描述符descriptor使用原理解析

    描述符(descriptor)是实现了__get__、__set__、__del__方法类,进一步可以细分为两类: 数据描述符:实现了__get__和__set__ 非数据描述符:没有实现__set...属性是一个描述符,当value属性是一个数据描述符时,它屏蔽了实例同名属性value,实例value属性读取与赋值都会直接被转移到类属性value上。...这种统一过程可以使用描述符修改属性访问默认方式实现。静态方法限制实例默认绑定,将方法当做普通函数使用;类方法始终将类作为第一个参数传入,上述partial将类固定为方法第一个参数。...总结 描述符是实现了__get__、__set__、__del__等特殊方法类,在属性访问时起着很大作用。 数据描述符会覆盖同名实例属性,通过使用数据描述符,达到通过实例修改类变量目的。...描述符用于修改属性默认访问方式,借此可以实现类方法与静态方法。 以上就是本文全部内容,希望大家学习有所帮助。

    52651
    领券