python之反射
阿新 • • 發佈:2017-07-26
方法 port tee acc ttr getattr rom get 執行
1.定義:以字符串的形式去對象(模塊)中操作其成員(方法 變量 等)
inp=input(‘請輸入模塊名:‘) #以字符串的形式導入模塊 DD=__import__(inp,fromlist=True) re=DD.f1()#f1()是導入的模塊的函數 print(re) s=input(‘輸入函數名稱:‘) #以字符串的形式去模塊中找函數 target_func=getattr(DD,s) r=target_func()#執行函數 print(r) #以字符串的形式去某個模塊中判斷東西是否存在 has_func=hasattr(DD,s) print(has_func)#存在的話返回結果為True#以字符串的形式去某個模塊中設置東西 set_func=setattr(DD,‘a‘,9) print(DD.a)#得到的結果為9 #以字符串的形式去某個模塊中刪除東西 del_func=delattr(DD,‘a‘) print(DD.a)#運行報錯 AttributeError: ‘module‘ object has no attribute ‘a‘
2.基於反射模擬Web框架路由系統(只能用一個模塊)
from lib import account #導入模塊 url=input(‘請輸入url:‘).split(‘/‘)[-1] if hasattr(account,url): target_func=getattr(account,url) re=target_func() print(re) else: print(‘404‘)
3.基於反射模擬Web框架路由系統(任意模塊)
#規定用戶輸入格式 模塊名/函數名 url=input("請輸入url:") target_model,target_func=url.split(‘/‘) m=‘lib.‘+target_model#導入的模塊在lib文件中 #導入模塊 model=__import__(m,fromlist=True) #判斷函數是否在導入的模塊中 if hasattr(model,target_func): re=getattr(model,target_func) r=re() print(r) else: print(‘404‘)
python之反射