码迷,mamicode.com
首页 > 编程语言 > 详细

python--反射机制

时间:2018-03-10 11:51:24      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:find   att   模块名   一个   name   利用   linux   pre   font   

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

 

python--反射机制

标签:find   att   模块名   一个   name   利用   linux   pre   font   

原文地址:https://www.cnblogs.com/chaguang/p/8537402.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!