通过字符串映射或修改程序运行时的状态、属性、方法。有如下四个方法
1.hasattr(obj,name_str) , 判断一个对象obj里是否有对应的name_str字符串的方法
2.getattr(obj,name_str), 根据name_str字符串去获取obj对象里的对应的方法的内存地址
3.setattr(obj,'y',z), is equivalent to ``x.y = v'' obj是一个对象 y是一个对象中需要的属性 v 是y的值
4.delattr is equivalent to ``del x.y''
实例代码如下:
''' 反射 hasattr(obj,name_str) , 判断一个对象obj里是否有对应的name_str字符串的方法 getattr(obj,name_str), 根据name_str字符串去获取obj对象里的对应的方法的内存地址 setattr(obj,'y',z), is equivalent to ``x.y = v'' delattr is equivalent to ``del x.y'' ''' def bulk(self): print("%s is yelling...." %self.name) class Dog(object): def __init__(self,name): self.name = name def eat(self,food): print("%s is eating..."%self.name,food) d = Dog("TD") choice = input(">>:").strip() if hasattr(d, choice): haveFunc = getattr(d, choice) haveFunc("food") else: setattr(d, choice, bulk) #若从控制台输入的字符串为talk此时此处等价于d.talk = bulk Add_func = getattr(d, choice) Add_func(d)
结论:反射是通过字符串的形式操作对象相关的成员。一切事物都是对象!!!