1. 程式人生 > >python之反射

python之反射

方法 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之反射