码迷,mamicode.com
首页 > 编程语言 > 详细

python反射

时间:2019-01-12 15:29:14      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:关系   利用   本质   elf   异常   自己   查看   callable   point   

反射refletion:指的是运行时获取类型定义信息

运行时,区别在于编译时,指的是程序被加载到内存中执行的时候

简单的说,在python中,能够通过一个对象,找出其type,class,attribute或method的能力,称为反射或者自省

具有反射能力的函数有:type(),isinstance(),callable(),dir(),getattr()

例:有一个Point类,查看它实例的属性,并修改它,动态为实例增加属性

技术分享图片

技术分享图片

上例通过属性字典__dict__来访问对象的属性,对属性进行修改或者增加新的属性,本质上也是利用的反射的能力,但是这种访问方式不优雅,python提供了内置的函数

技术分享图片

技术分享图片

技术分享图片

 

反射相关的魔术方法:__getattr__、__setattr__、__delattr__

 技术分享图片

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

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

 

__getattribute__:

技术分享图片

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

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

除非明确知道__getattribute__方法用来做什么,否则不要使用它

 

技术分享图片

 

python反射

标签:关系   利用   本质   elf   异常   自己   查看   callable   point   

原文地址:https://www.cnblogs.com/s-p-l/p/10259471.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!