什么是反射?
1、有时我们要访问某个变量或是方法时并不知道到底有没有这个变量或方法,所以就要做些判断。判断是否存在字符串对应的变量及方法。
2、我们知道访问变量时是不能加引号的,否则会被当成字符串处理。如果要通过字符串找到对应的变量,那该怎么办呢
反射就是用于解决上面两个问题而产生的,所谓反射,按我的理解就是反过来告诉我字符串是什么,是变量or方法
python中访问类或对象的成员有三种方法
##如下所示 obj 为对象 var为变量 func为函数
1、obj.var 或 obj.func()
2、obj.__dict__['var']
3、getattr(obj,'var')
反射有4个方法 getattr() hasattr() setattr() delattr()
举例子如下,一目了然
class A(object): gvar = 'min' def __init__(self,name,male): self.name = name self.male = male def func1(self): print "func1 :my name is %s" % self.name def func2(self): print "func2 :I'm a %s" % self.male ##实例化对象 obj = A('min','girl') hasattr(obj,'gvar') hasattr(obj,'func1') getattr(obj,'gvar') getattr(obj,'name') getattr(obj,'func1') getattr(obj,'func2')() setattr(obj,'gvar','ben') getattr(obj,'gvar') delattr(obj,'gvar') ##python中一切事物都是对象,故其实上面的obj也是可以是类名,模块名 getattr(A,'func2') hasattr(A,'func1')