python中属性描述符的详细介绍(代码示例)

本篇文章给大家带来的内容是关于python中属性描述符的详细介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

作为一个小白,每天都在不断地看东西,学知识,今天给大家介绍一个好东西——属性描述符

什么是属性描述符呢?

其实在一个类中实现set__、__get__、__delete中任意一个魔法函数就是一个属性描述符。

接下来我们定义一个属性描述符:

立即学习“Python免费学习笔记(深入)”;

class IntegerField:    def __get__(self, instance, owner):        pass    def __set__(self, instance, value):        pass    def __delete__(self, instance):        passclass User:    high= IntField()

登录后复制

__get__:当我们用类或者实例来调用该属性时,会返回__get__函数的结果。
__set__:当我们用实例来设置属性值时,Python会调用该函数。对类没有限制作用。
__delete__:当我们用实例试图删除该属性时,Python会调用该函数。对类没有限制作用。
到底这个东西怎么用呢?接下来为大家修改上面的代码

class IntegerField:    def __get__(self, instance, owner):        return self.value    def __set__(self, instance, value):        if not isinstance(value,numbers.Integral):            raise ValueError("请输入一个整数")        self.value=value            def __delete__(self, instance):        passclass User:    high=IntegerField() #验证代码if __name__ == '__main__':    user=User()    user.high='175'    #报错,ValueError:请输入一个整数    User.high=175    #正确执行,不报错

登录后复制

这样我们就能够运用属性描述符来给属性附上一定的逻辑了。
其实在属性描述符下还分为
1、数据描述符:实现了__set__、__get__

if __name__ == '__main__':    user=User()    user.high=175    print(user.__dict__)    #high是不放入__dict__中的,优先查找数据描述符中的值    user.__dict__["high"]="abc"    #这样赋值时可以的,并且可以放入__dict__中    print(user.high)    #会报错,因为在调用__get__方法时并没有value属性

登录后复制

2、非数据:实现__get__不实现__set__

class NonField:    def __init__(self, high=170):        self.value = high    def __get__(self, instance, owner):        return self.valueclass User:    high = NonField()if __name__ == '__main__':    user = User()    user.high = '175'    #会放入user.__dict__中    print(user.__dict__)

登录后复制

以上就是python中属性描述符的详细介绍(代码示例)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2534423.html

(0)
上一篇 2025年3月5日 21:30:53
下一篇 2025年3月5日 21:30:58

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 怎么找到黑客的联系方式?

    如果你想要找到黑客的联系方式,那么你可能面临以下难题:黑客往往会隐藏他们的身份,并且他们的联系方式很难被发现。php小编草莓在这里为你提供了一份指南,旨在帮助你找到黑客的联系方式。在本指南中,我们将介绍一些常见的黑客使用的联系方式,并提供一…

    2025年3月5日
    200
  • Python列表的长度调节方法(附代码)

    本篇文章给大家带来的内容是关于python列表的长度调节方法(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 Python 的列表(list)是一个非常灵活的数组,可以随意调整长度。正是因为这种便利,使得我们会情不…

    编程技术 2025年3月5日
    000
  • Python3中时间处理与定时任务的方法介绍(附代码)

    本篇文章给大家带来的内容是关于python3中时间处理与定时任务的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 无论哪种编程语言,时间肯定都是非常重要的部分,今天来看一下python如何来处理时间和py…

    编程技术 2025年3月5日
    200
  • Python实现图片像素化的代码实例

    本篇文章给大家带来的内容是关于python实现图片像素化的代码实例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 起因 看到网上的像素图片,感觉蛮有趣的,就打算用python一些PIL类库写一个。 实现思路 把一张图片分成…

    2025年3月5日 编程技术
    200
  • Python中面向对象详细介绍(代码示例)

    本篇文章给大家带来的内容是关于python中面向对象详细介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 面向对象的三大特性:集成 多态 封装我们来学习一下在Python种三种特性的实现 继承 #继承demo…

    编程技术 2025年3月5日
    200
  • python中JWT的简单介绍

    本篇文章给大家带来的内容是关于python中jwt的简单介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((R…

    编程技术 2025年3月5日
    200
  • python基础题目总结(附答案)

    本篇文章给大家带来的内容是关于python基础题目总结(附答案),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1、为什么学习Python? 人生苦短?人间不值得?想想自己的初心吧! 2、通过什么途径学习的Python? …

    编程技术 2025年3月5日
    200
  • Python中raise 与 raise … from之间有何区别?

    本篇文章给大家带来的内容是关于Python中raise 与 raise … from之间有何区别?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 起步 python 的 raise 和 raise from 之间…

    编程技术 2025年3月5日
    200
  • python中的yield关键字的用法介绍(代码示例)

    本篇文章给大家带来的内容是关于python中的yield关键字的用法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 yield是python的一个关键字,刚接触python的时候对这个关键字一知半解,掌握之…

    编程技术 2025年3月5日
    200
  • python中的排序操作和heapq模块的介绍(代码示例)

    本篇文章给大家带来的内容是关于python中的排序操作和heapq模块的介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 说到排序,很多人可能第一想到的就是sorted,但是你可能不知道python中其实还有…

    编程技术 2025年3月5日
    200

发表回复

登录后才能评论