python中反射(__import__和getattr使用),,反射:1、可通过字符
python中反射(__import__和getattr使用),,反射:1、可通过字符
反射:
1、可通过字符串的形式导入模块
1.1、单层导入
1 __import__(‘模块名‘)View Code
1.2、多层导入
1 __import__(‘ list.text.commons‘,fromlist=True) #如果不加上fromlist=True,只会导入list目录View Code
2、可以通过字符串的形式执行模块的功能
1 import glob,os 2 3 modules = [] 4 for module_file in glob.glob("*-plugin.py"): 5 try: 6 module_name,ext = os.path.splitext(os.path.basename(module_file)) 7 module = __import__(module_name) 8 modules.append(module) 9 except ImportError:10 pass #ignore broken modules11 #say hello to all modules12 for module in modules:13 module.hello()进行反射py代码
1 def getfunctionbyname(module_name,function_name):2 module = __import__(module_name)3 return getattr(module,function_name)__import__导入的模块
3、反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员下面逐一介绍先看例子:
1 class Foo(object): 2 3 def __init__(self): 4 self.name = ‘abc‘ 5 6 def func(self): 7 return ‘ok‘ 8 9 obj = Foo()10 #获取成员11 ret = getattr(obj, ‘func‘)#获取的是个对象12 r = ret()13 print(r)14 #检查成员15 ret = hasattr(obj,‘func‘)#因为有func方法所以返回True16 print(ret)17 #设置成员18 print(obj.name) #设置之前为:abc19 ret = setattr(obj,‘name‘,19)20 print(obj.name) #设置之后为:1921 #删除成员22 print(obj.name) #abc23 delattr(obj,‘name‘)24 print(obj.name) #报错View Code
python中反射(__import__和getattr使用)
相关内容
- 暂无相关文章
评论关闭