python--反射机制
python的反射机制能够让我们利用字符串去动态的驱动不同的事件,例如导入模块,调用函数等,涉及到的函数有hasattr,getattr,setattr,delattr
- hasattr:检查模块或者对象中是否有某个成员
- getattr:获取成员,即将字符串输入的数据装换成对应的成员
- setattr:设置成员
- delattr:删除成员
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 modName=input("请输入模块名:") 2 #__import__:根据字符串输入的模块名导入相对应得模块,如果有嵌套的模块,需要加fromlist=True 3 name=__import__('se.'+modName,fromlist=True) 4 5 print(modName) 6 7 funcName=input("请输入函数名:") 8 9 #检查模块中是否相对应得函数 10 exis=hasattr(name,funcName) 11 12 if exis: 13 #获得函数 14 fun=getattr(name,funcName) 15 #执行函数 16 fun() 17 #获得变量 18 value=getattr(name,"PYTHON") 19 print(value) 20 else: 21 print("not find") 22 23 #设置 24 setattr(name,"NAME","LINUX") 25 print(hasattr(name,"NAME")) 26 #删除 27 delattr(name,"PYTHON") 28 print(hasattr(name,"PYTHON"))
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 modName=input("请输入模块名:") 2 #__import__:根据字符串输入的模块名导入相对应得模块,如果有嵌套的模块,需要加fromlist=True 3 name=__import__('se.'+modName,fromlist=True) 4 5 className=input("请输入类名:") 6 #将模块中的类导入 7 cls=getattr(name,className) 8 #创建该类的一个实例 9 clsObj=cls() 10 #添加该对象的一个字段 11 clsObj.PYTHON="sdfsfdsf" 12 funcName=input("请输入函数名:") 13 14 #检查类中是否相对应得函数 15 exis=hasattr(clsObj,funcName) 16 17 if exis: 18 #获得该对象的函数 19 fun=getattr(clsObj,funcName) 20 #执行该对象的函数 21 fun() 22 #获得该对象的变量 23 value=getattr(clsObj,"PYTHON") 24 print(value) 25 else: 26 print("not find") 27 28 #设置 29 setattr(clsObj,"NAME","LINUX") 30 print(hasattr(clsObj,"NAME")) 31 #删除该对象相对应的变量,如果该变量是属于类的,那么就会出错 32 delattr(clsObj,"PYTHON") 33 print(hasattr(clsObj,"PYTHON"))