反射:通过字符串映射或修改程序运行时的状态、属性、方法
反射有以下三个方法:
hasattr(object, name) 判断一个对象(object)里是否有对应的字符串(name)的属性
getattr(object, name) 根据字符串(name)去获取对象(object)里的,对应方法的内存地址(即,获取对应的方法)
setattr(object, name,value) 给对象(object)添加属性(name)值(value)
delattr(object,name) 删除对象的属性
实例:
def sleep(self): print('%s在睡觉' % self.name) def talk(): print('说话') class People(object): sex = '男' def __init__(self, name): self.name = name def eat(self): print('%s正在吃东西' % self.name) p = People('simple') print(hasattr(p, 'eat')) # 返回True # 判断p这个对象中是否有eat这个属性。 print(hasattr(p, 'name')) # 返回True f = getattr(p, 'eat') # 获取eat的内存地址,即,获取eat方法 print(f) # 打印eat的内存地址 print(f()) # 打印eat的返回值,即,执行eat方法 # 变量操作 str = input('变量:').strip() val = input('变量的值:').strip() if hasattr(p, str): # 在p中是否存在str变量,str是用户传入的参数。如果存在,则执行以下操作。 func = getattr(p, str) # 获取p中str变量 print('原来的变量:%s=%s'%(str,func)) setattr(p,func,val) # 修改p中str变量的值 f = getattr(p,func) # 重新获取p中str变量 print('修改后的变量:%s=%s'%(str,val)) # 打印str的值 else: # 在p中不存在str变量,执行以下操作。 setattr(p,str,val) # 给p添加变量str,并赋值val --> str = val gv = getattr(p,str) # 获取p中新添加的str变量 print('新增了变量:%s=%s'%(str,gv)) # 打印新添加的str变量值 delattr(p, str) # 删除变量 print('删除了变量:%s' % str) # 删除p中str变量 print('是否还存在变量%s:%s'%(str,hasattr(p,str))) # 删除之后,再判断属性是否存在