初识python: 反射
反射:通过字符串映射或修改程序运行时的状态、属性、方法
反射有以下三个方法:
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))) # 删除之后,再判断属性是否存在
执行结果:
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() if hasattr(p, str): # 在p中是否存在str方法,str是用户传入的参数。如果存在,则执行以下操作。 func = getattr(p, str) # 获取p中str方法 print('方法%s执行结果:'%(str),end='') func() # 执行方法 else: # 在p中不存在str方法,执行以下操作。 # setattr(p,str,sleep) # 给p添加了类方法sleep,带self参数 setattr(p,str,talk) # 给p添加方法talk,不带self参数 # sleep = getattr(p,str) # 获取p中新添加的str方法的内存地址 talk = getattr(p,str) print('新增了方法:%s,返回结果:'%str) # 打印新添加的str变量值 # sleep(p) # 类方法调用,带self talk() # 普通方法调用,不带self delattr(p, str) # 删除方法 print('删除了方法:%s' % str) # 删除p中str变量 print('是否还存在变量%s:%s'%(str,hasattr(p,str))) # 删除之后,再判断属性是否存在
执行结果:
世风之狡诈多端,到底忠厚人颠扑不破;
末俗以繁华相尚,终觉冷淡处趣味弥长。
posted on 2019-08-28 11:41 Simple-Sir 阅读(183) 评论(0) 编辑 收藏 举报