反射
实例:
def login(): print('炫酷登录页面') def logout(): print('炫酷推出页面') def home(): print('炫酷主页面')
import lib.commons as commons
def run(): inp = input('请输入要访问的url:') if inp == 'login': commons.login() elif inp == 'logout': commons.logout() elif inp == 'home': commons.home() else: print('404') if __name__ == '__main__': run()
为了解决commons因函数过多导致的ifel(判断)过多的问题:
def run(): # account/login inp = input('请输入要访问的url:') # inp字符串类型 inp = "login" # commons.inp() # commons.login # 利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员,反射 #hasattr,getattr,delattr,setattr if hasattr(commons, inp): #检查commons用没有inp(输入) func = getattr(commons, inp) #从commons中得到inp(输入)赋值给func func() #执行该函数 else: print('404')
也可以导入模块
def run(): # account/login inp = input('请输入要访问的url:') # inp字符串类型 inp = "login" # commons.inp() # commons.login # 利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员,反射 m, f = inp.split('/') # import lib.account #无fromlist参数,只导入lib obj = __import__("lib."+ m, fromlist=True) if hasattr(obj, f): func = getattr(obj, f) func() else: print('404')
if __name__ == '__main__':
run()