反射
1通过字符串的形式,导入模块
2通过字符串的形式,去模块中寻找指定函数,并执行
先看下这个例子
1 #这样导入模块没有问题 2 import comm as cc 3 4 #也可以这样导入,根据字符串导入模块。dd实际等于上面的as 5 dd= __import__("comm") 6 7 dd.f1()
1 mod=input("请输入模块:") 2 mod_func=input("请输入函数:") 3 4 #__import__用于字符串形式的导入模块 5 aa=__import__(mod) 6 7 #getattr根据字符串查找模块中的函数 8 func=getattr(aa,mod_func) 9 10 result=func() 11 print(result)
补充:
字符串多层导入
r=__import__('xxx.xxx.xx.abc',fromlist=True)
反射方法:
getattr 根据字符串的形式去某个模块中寻找东西
hasattr 根据字符串的形式去某个模块中判断东西是否存在
setattr 根据字符串的形式去某个模块中设置东西
delattr 根据字符串的形式去某个模块中删除东西
基于反射模拟web框架路由访问
1 #-*- coding:utf-8 -*- 2 from conf import account 3 url=input("输入url:") 4 des_url=url.split("/")[-1] 5 6 #先用 hasattr看方法是否存在 7 if hasattr(account,des_url): 8 #方法存在就直接获取方法 9 result=getattr(account,des_url) 10 print(result()) 11 else:print(404)