python中反射(__import__和getattr使用)
Posted 逍遥无名
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中反射(__import__和getattr使用)相关的知识,希望对你有一定的参考价值。
反射:
1、可通过字符串的形式导入模块
1.1、单层导入
1 __import__(\'模块名\')
1.2、多层导入
1 __import__(\' list.text.commons\',fromlist=True) #如果不加上fromlist=True,只会导入list目录
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 modules 11 #say hello to all modules 12 for module in modules: 13 module.hello()
1 def getfunctionbyname(module_name,function_name): 2 module = __import__(module_name) 3 return getattr(module,function_name)
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方法所以返回True 16 print(ret) 17 #设置成员 18 print(obj.name) #设置之前为:abc 19 ret = setattr(obj,\'name\',19) 20 print(obj.name) #设置之后为:19 21 #删除成员 22 print(obj.name) #abc 23 delattr(obj,\'name\') 24 print(obj.name) #报错
以上是关于python中反射(__import__和getattr使用)的主要内容,如果未能解决你的问题,请参考以下文章