美文网首页
Python 反射

Python 反射

作者: __RY__ | 来源:发表于2018-09-22 20:55 被阅读19次

概述

运行时,区别于编译时,指的是程序被加载到内存中执行的时候。
反射,reflection,指的是运行时获取类型定义信息。
一个对象能够在运行时,像照镜子一样,反射出其类型信息。
简单说,在Python中,能够通过一个对象,找出其type、class、attribute或method的能力,称为反射或者自省。
具有反射能力的函数有:type()、isinstance()、callable()、dir()、getattr()

反射相关的函数和方法

这种动态增删属性的方式是运行时改变类或者实例的方式,但是装饰器或Mixin都是定义时就决定了,因此反射能力具有更大的灵活性。

反射相关的魔术方法

_getattr_()
一个类的属性会按照继承关系找,如果找不到,就会执行 getattr() 方法,如果没有这个方法,就会抛出AttributeError异常表示找不到属性。
查找属性顺序为:
instance.dict --> instance.class.dict --> 继承的祖先类(直到object)的dict ---找不到--> 调用getattr()

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

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

_getattribute_()
实例的所有的属性访问,第一个都会调用 getattribute 方法,它阻止了属性的查找,该方法应该返回(计算 后的)值或者抛出一个AttributeError异常。
它的return值将作为属性查找的结果。
如果抛出AttributeError异常,则会直接调用 getattr 方法,因为表示属性没有找到。

_getattribute_ 方法中为了避免在该方法中无限的递归,它的实现应该永远调用基类的同名方法以访问需要的任何属性,例如 object.getattribute(self, name) 。
注意,除非你明确地知道 getattribute 方法用来做什么,否则不要使用它。

相关文章

  • python反射

    我们可通过反射添加、修改、删除某个对象的属性和方法:hasattr(object,str):判断该对象是否含有该方...

  • Python 反射

    反射:本质是利用字符串的形式去对对象/模块进行操作其成员,一种基于字符串的时间驱动。以我现在的理解,就是本来需要显...

  • Python 反射

    概述 运行时,区别于编译时,指的是程序被加载到内存中执行的时候。反射,reflection,指的是运行时获取类型定...

  • python反射

    概念 运行时: 区别于编译时,指程序被加载到内存中执行的时候. 反射(自省): 指运行时获取对象的类型信息. 具有...

  • Python 反射

    反射: 通过字符串的形式来导入模块,并以字符串的形式执行函数 应用,大部分应用在web框架中。

  • Python 反射

    首先说说反射是什么?反射是可以以字符串的形式动态调用函数的过程。 当然反射不只是字符串的函数执行,她和exec和e...

  • python 反射

    反射 dir() 拿到对象所有属性https://zhuanlan.zhihu.com/p/99150129[ht...

  • python 反射

    python 反射 -解释类型的语言,在程序被加载到内存运行的时候,可以通过某种方p式获取对象的类型、属性等信息的...

  • 面向对象:反射,内置方法

    反射 python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使...

  • __import__ 反射和面向对象基础 self 封装 继承(

    一、反射 python中的反射功能是由以下四个内置函数提供:hasattr、getattr、setattr、del...

网友评论

      本文标题:Python 反射

      本文链接:https://www.haomeiwen.com/subject/ahixoftx.html