python--反射机制

  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"))
反射二

 

posted @ 2018-03-10 09:31  菜鸟也有高飞的时候  阅读(412)  评论(0编辑  收藏  举报