python的反射机制能够让我们利用字符串去动态的驱动不同的事件,例如导入模块,调用函数等,涉及到的函数有hasattr,getattr,setattr,delattr
- hasattr:检查模块或者对象中是否有某个成员
- getattr:获取成员,即将字符串输入的数据装换成对应的成员
- setattr:设置成员
- delattr:删除成员
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"))
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"))