python - 反射
1.利用反射导入模块
obj = __import__("commons") #同级目录中的commons.py obj.login() #执行commons模块中的login函数
导入多级目录里的模块:
例如:
在admin.py文件中导入lib目录下的commons模块
obj = __import__("lib.commons",fromlist=True)
2.
commons.py文件内容:
def login(): print('登录页面')
index.py文件内容:
import commons def run(): inp = input('输入URL:') #利用字符串的形式去对象(模块)中操作(寻找/检查)成员,反射 # delattr() # setattr() if hasattr(commons,inp): func = getattr(commons,inp) func() else: print('404') if __name__ == '__main__': run()
结果:
3.反射:伪造web框架的路由系统
commons.py文件内容
def login(): print('登录页面')
index.py文件内容
def run(): inp = input('请输入url:') m,f = inp.split('/') #m相当于模块commons名称,f相当于输入commons模块中函数的名称,例如:login() obj = __import__(m) if hasattr(obj,f): func = getattr(obj,f) func() else: print('404') if __name__ == '__main__': run()
运行结果:
UnixFBI 运维特工
www.unixfbi.com