反射

it2022-05-05  73

反射:通过字符串映射到对象的属性

反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr  获取成员、检查成员、设置成员、删除成员下面逐一介绍先看例子:

class People: def __init__(self, name, age): self.name = name self.age = age def talk(self): print('%s is talking' % self.name) obj = People('alex', 18) # print(obj.name) # ==obj.__dict__['name'] # print(obj.talk()) print(hasattr(obj, 'talk')) # hasattr就是用来判定给出的对象中有没有这个属性,有则返回True,反之返回False print(getattr(obj, 'name', None)) # getattr(o,name,default)参数o:给定的对象。参数name:是要获取的属性。参数default:是发生问题是给出结局方案 # 当default = None时,如果要获取的属性不存在。该命令并不会报错 setattr(obj, 'name', 'wang') #obj.name = 'wang' print(obj.name) delattr(obj, 'name') print(getattr(obj, 'name', None))

结果:

True alex wang None

 

反射的使用:

根据上面的程序稍作修改

class People: def __init__(self, name, age): self.name = name self.age = age def run(self): while True: inp = input('>>>:').strip() #cmd='talk 1.txt cmd=inp.split()[0] if hasattr(self, cmd): func = getattr(self, cmd) func() def talk(self): print('%s is talking' % self.name) obj = People('alex', 18) obj.run()

结果:

>>>:talk alex is talking >>>:

总结分析:可以看出,输入命令后。hasattr判断talk是否存在,如果存在就执行getattr结果返回func,接着运行func()其实就是运行的talk()。

 

转载于:https://www.cnblogs.com/z18271397173/p/9134184.html


最新回复(0)