一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第21天,点击查看活动详情。
反射
一.什么是反射
反射就是通过[字符串]的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动。简而言之就是它可以把[字符串]映射到实例的变量或者实例的方法然后可以去执行调用、修改等操作。
这一点在项目开发中尤为重要,在不清楚方法或变量在对象中是否存在时,可以通过反射这个特殊的方法或机制来对对象中"未知的"变量或者方法进行操作。
二.可使用反射的地方
1、反射类中的变量 : 静态属性,类方法,静态方法
2、反射对象中的变量、对象属性、普通方法
3、 反射模块中的变量
4、反射本文件中的变量
简而言之:在python中只有:实例化对象、类、其他模块(.py结尾的文件)、本模块(.py结尾的文件 只有以上四个才能使用,因为他们都能通过== .== 的方式获取或调用,这也算是一种前提
attr是属性英文的前几个字母,属性指的是类中类变量、实例变量和方法。但是要注意不能是私有的,如果你的变量是以“_”开头,那将无法获取。
三.反射的方法:
一.内建函数
-
getattr(object,name[,default])通过name返回object的属性值,当属性不存在,返回default默认值,如果没有default,则抛出异常,name必须是字符串
-
setattr(object,name,value)操作object的属性,如有则覆盖,不存在则新增
-
hasaattr(object,name) 判断对象是否有这个名字的属性,name必须为字符串,有返回True,不存在返回Felse
-
delattr(object,name) 当通过实例来删除属性时调用此方法
2、反射方法的查找路径
查找路径和继承一致 对象本身__dict__---->class的__.dict__---->继承的祖先类(直到object)的__dict__