返回顶部
首页 > 资讯 > 后端开发 > Python >Python中反射和描述器总结
  • 383
分享到

Python中反射和描述器总结

反射Python 2023-01-31 01:01:57 383人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

反射在python中,能够通过一个对象,找出type、class、attribute或者method的能力,成为反射。 函数与方法 内建函数:getattr(object,name[,degault])  通过name返回object的属性

反射

python中,能够通过一个对象,找出type、class、attribute或者method的能力,成为反射

 

函数与方法

 

内建函数:

getattr(object,name[,degault])  通过name返回object的属性值,当属性不存在,将使用default返回,如果没有default,则抛出AttributeError。Name必须为字符串

 

setattr(object,name,value)  object的属性存在,则覆盖,不存在,新增。

 

hasattr(object,name)  判断对象是否有这个名字的属性,name必须为字符串

 

 

反射相关的魔术方法

__getattr__()

一个类的属性会按照继承关系找,如果找不到,就会执行__getattr__()方法,如果没有这个方法,就会抛出AttributeError异常表示找不到属性。

查找顺序为:

Instance.__dict__-->instance.__class__.__dict__-->继承的祖先类(直到object)的__dict__---找不到--> 调用__getattr__()

 

__setattr__()

可以拦截对实例属性的增加、修改操作,如果要设置生效,需要自己操作实例的__dict__

 

__delattr__()

可以阻止通过实例删除属性的操作,但是通过类依然可以删除属性。

 

__getattribute__()

实例的所有的属性访问,第一个都会调用__getattribute__方法,它阻止了属性的查找,该方法应该返回值或者抛出一个AttributeError异常

它的return值将作为属性查找的结果

如果抛出AttributeError异常,则会直接调用__gutattr__方法,因为表述属性没有找到。

__grtattribute__方法中为了避免在该方法中无限的递归,他的实现应该永远调用基类的同名方法以访问需要的任何属性,例如:object.__getattribute__(self,name)。一般不使用该方法

 

魔术方法

__getattr__()

当通过搜索实例、实例的类及祖先类查不到属性,就会调用此方法

__setattr__()

通过.访问实例的属性,进行增加,修改都要调用它

 

__delattr__()

当通过实例来删除属性时调用此方法

__getattribute__()

实例所有的属性调用都从这个方法开始

 

属性查找顺序:

实例调用__getattribute__() --> Instance.__dict__-->instance.__class__.__dict__-->继承的祖先类(直到object)的__dict__---找不到--> 调用__getattr__() 。

 

描述器:

 

描述器定义

Python中,一个类实现了__get__、__set__、__delete__三个方法中的任何一个方法,就是描述器。

如果仅实现了__get__,就是非数据描述符non-data descriptor

同时实现了__get__,__set__就是数据描述符 data descriptor

如果一个类的类属性设置为描述器实例,那么它被称为owner属主

 

属性查找顺序

实例的__dict__优先于非数据描述器,数据描述器优先于实例的__dict__

 

有__delete__方法有同样的效果,有了这个方法,也是数据描述器。

 

 

描述器在python中应用非常广泛,python的方法(包括staticmethod()和class method())都实现为非数据描述器,因此,实现可以重新定义和覆盖方法。这允许单个实例获取与同一个类的其他实例不同的行为。

Python中property()函数实现为一个数据描述器。


--结束END--

本文标题: Python中反射和描述器总结

本文链接: https://www.lsjlt.com/news/183083.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python中反射和描述器总结
    反射在Python中,能够通过一个对象,找出type、class、attribute或者method的能力,成为反射。 函数与方法 内建函数:getattr(object,name[,degault])  通过name返回object的属性...
    99+
    2023-01-31
    反射 Python
  • Python中的反射知识点总结
    通过字符串映射或修改程序运行时的状态、属性、方法, 可以通过下面这4中方法 ''' 使用getattr(object, name_str, default=None) 方...
    99+
    2024-04-02
  • JAVA编程中的反射用法总结
    本篇内容主要讲解“JAVA编程中的反射用法总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA编程中的反射用法总结”吧!目录下面对Java反射的基础知识进行说明和总结:总结下面对Java反...
    99+
    2023-06-20
  • python中什么是描述器
    这期内容当中小编将会给大家带来有关python中什么是描述器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对...
    99+
    2023-06-14
  • Python异常处理与反射相关问题总结
    一、异常处理 在程序开发中如果遇到一些 不可预知的错误 或 你懒得做一些判断 时,可以选择用异常处理来做。 import requests while True: u...
    99+
    2024-04-02
  • python中描述器有哪些分类
    这篇文章将为大家详细讲解有关python中描述器有哪些分类,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,P...
    99+
    2023-06-14
  • Python中的描述器怎么使用
    这篇文章主要介绍“Python中的描述器怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python中的描述器怎么使用”文章能帮助大家解决问题。概述Python描述器是一个Python对象,它...
    99+
    2023-07-05
  • 怎么在Python描述器中调用__getattribute__
    今天就跟大家聊聊有关怎么在Python描述器中调用__getattribute__,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python有哪些常用库python常用的库:1.re...
    99+
    2023-06-14
  • Python中属性和描述符的正确使用
    关于@property装饰器 在Python中我们使用@property装饰器来把对函数的调用伪装成对属性的访问。 那么为什么要这样做呢?因为@property让我们将自定义的代码同变量的访问/设定联系在了...
    99+
    2022-06-04
    属性 正确 Python
  • Python虚拟机中描述器怎么实现
    在Python虚拟机中,描述器(Descriptor)是一种特殊的对象,它可以在类的属性访问过程中定义和控制对属性的访问。 要实现一...
    99+
    2024-04-09
    Python
  • python中面向对象的注意点概述总结
    目录一、继承二、是否继承object类的区别三、封装四、类方法、静态方法与属性方法五、多态六、python是否存在实质意义上的私有变量?总结一、继承 与java的继承不同python...
    99+
    2024-04-02
  • Python中的descriptor描述器简明使用指南
    当定义迭代器的时候,描述是实现迭代协议的对象,即实现__iter__方法的对象。同理,所谓描述器,即实现了描述符协议,即__get__, __set__, 和 __delete__方法的对象。 单看定义,还...
    99+
    2022-06-04
    简明 使用指南 Python
  • python中描述器的访问顺序是什么
    这篇文章给大家介绍python中描述器的访问顺序是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float...
    99+
    2023-06-14
  • Python中set 和dict 的总结
    Setset的定义: set是可变的,无序的,不重复的元素组成的可迭代的集合。 set () 定义一个空集合。set(iterable)  定义一个set例如:set1=set(range(100)) set 中的元素set中的元素必须是可...
    99+
    2023-01-31
    Python set dict
  • Python虚拟机中描述器的王炸应用分享
    目录property什么是 property如何使用 propertyproperty 的本质在 python 语言层面实现 property 机制classmethod 和 sta...
    99+
    2023-05-19
    Python虚拟机描述器应用 Python虚拟机 Python 描述器
  • Python中对象迭代与反迭代的技巧总结
    一、如何实现可迭代对象和迭代器对象? 实际案例 某软件要求从网络抓取各个城市气味信息,并其次显示: 北京: 15 ~ 20 天津: 17 ~ 22 长春: 12 ~ 18 ...... 如果一次抓取...
    99+
    2022-06-04
    迭代 对象 技巧
  • python总结之闭包和装饰器
    目录一、装饰器1.装饰器的简单介绍2.装饰器的解析过程二、闭包三、闭包中nonlocal语句的使用1.外部变量的引用和改写2.nolocal的使用及特点四、闭包与装饰器五、闭包的作用...
    99+
    2024-04-02
  • 深入解析Python中的descriptor描述器的作用及用法
    一般来说,一个描述器是一个有“绑定行为”的对象属性(object attribute),它的访问控制被描述器协议方法重写。这些方法是 __get__(), __set__(), 和 __delete__()...
    99+
    2022-06-04
    作用 Python descriptor
  • 深入理解Python虚拟机中描述器的实现原理
    目录描述器的基本用法描述器的实现原理描述器的应用场景实现属性访问控制实现数据验证和转换实现延迟加载和缓存实现 ORM 映射总结在本篇文章当中主要给大家介绍一个我们在使用类的时候经常使...
    99+
    2023-05-19
    Python虚拟机描述器实现原理 Python 描述器 Python虚拟机
  • Bottle框架中的装饰器类和描述符应用详解
    最近在阅读Python微型Web框架Bottle的源码,发现了Bottle中有一个既是装饰器类又是描述符的有趣实现。刚好这两个点是Python比较的难理解,又混合在一起,让代码有些晦涩难懂。但理解代码之后不...
    99+
    2022-06-05
    详解 框架 Bottle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作