定义
反射是根据字符串的形式去对操作其成员
了解反射前,我先看看内置方法__import__,还记得这个内置方法吗?
- __import__ 用于以字符串的形式导入模块
inp = input('请输入你要导入的模块:') mokuai = __import__(inp) #import xml as mokuai print(mokuai.__doc__)
- getattr 用于以字符串的形式去某个模块寻找函数
import re str_func = input('请输入你要执行re下的方法:') tar_func = getattr(re,str_func) print(tar_func) #打印找到函数的内存地址
反射成员
-
getattr 用于以字符串的形式去某个模块寻找函数
import re str_func = input('请输入你要执行re下的方法:') tar_func = getattr(re,str_func,None) #找到了就返回函数,没有找到就返回None,不设置None,没找到就报错 print(tar_func) #打印找到函数的内存地址
-
hasattr 根据字符串的形式去某个模块中查看是否存在某东西
import re ret1 = hasattr(re,'match') print(ret1) ret2 = hasattr(re,'fjfijajfojg') print(ret2)
-
setattr 设置
r = hasattr(commons,'age') print(r) #False setattr(commons,'age',lambda a:a + 1) r = getattr(commons,'age') #没报错 ret = r(1) print(ret)
-
delattr 删除
实例:web框架的路由系统
from lib import account url = input('请输入url:') inp = url.split('/')[-1] if hasattr(account,inp): func = getattr(account,inp) func() else: print('404')
url = input('请输入url:') target_module,target_func = url.split('/') m = __import__('lib.'+target_module,fromlist=True) if hasattr(m,target_func): tar_func = getattr(m,target_func) r = tar_func() print(r) else: print('404')
欢迎大家对我的博客内容提出质疑和提问!谢谢
笔者:拍省先生