反射:
1、可通过字符串的形式导入模块
1.1、单层导入
__import__('模块名')
1.2、多层导入
__import__(' list.text.commons',fromlist=True) #如果不加上fromlist=True,只会导入list目录
2、可以通过字符串的形式执行模块的功能
import glob,os modules = [] for module_file in glob.glob("*-plugin.py"): try: module_name,ext = os.path.splitext(os.path.basename(module_file)) module = __import__(module_name) modules.append(module) except ImportError: pass #ignore broken modules #say hello to all modules for module in modules: module.hello()
def getfunctionbyname(module_name,function_name): module = __import__(module_name) return getattr(module,function_name)
3、反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员下面逐一介绍先看例子:
class Foo(object): def __init__(self): self.name = 'abc' def func(self): return 'ok' obj = Foo() #获取成员1 ret = getattr(obj, 'func')#获取的是个对象 r = ret() print(r) #检查成员 ret = hasattr(obj,'func')#因为有func方法所以返回True print(ret) #设置成员 print(obj.name) #设置之前为:abc ret = setattr(obj,'name',19) 20 print(obj.name) #设置之后为:19 21 #删除成员 22 print(obj.name) #abc 23 delattr(obj,'name') 24 print(obj.name) #报错