python的學習之路day6
阿新 • • 發佈:2018-01-06
ons tro 利用 調用 __main__ getattr 輸入 run 需要
反射
利用字符串的形式去對象(模塊)中操作(尋找/檢查/刪除/設置)成員(函數),反射
用了一個仿網頁的get方法實現
commons.py文件
commons.py def login(): print("登錄頁面") def logout(): print("退出頁面") def home(): print("主頁面")
index.py文件
import commons # 調用commons模塊 def run(): url = input("請輸入要訪問的url:") """ url==字符串類型,如果url==“login” commons.url() 顯然,這樣是不對的,因為這樣執行commons會去他裏面找他是否有url這個函數,如果沒有,直接報錯 利用字符串的形式去對象(模塊)中操作(尋找/檢查/刪除/設置)成員(函數),反射 """ # setattr() # delattr() if hasattr(commons, url): # url==字符串,而現在,url相當於等於一個函數,我們輸入的函數,用hasattr去判斷是否存在,返回值True或False func = getattr(commons, url) # 用getattr拿取這個函數,比如url==login,那麽也就是說現在(func==commons.login) func() # 然後我們再來執行以下func,就表示執行commons裏面的函數 else: print("404") # 如果hasattr沒有檢查到,就執行這句404 if __name__ == ‘__main__‘: # __name__ 是當前模塊名,當模塊被直接運行時模塊名為 __main__ 。這句話的意思就是,當模塊被直接運行時,以下代碼塊將被運行,當模塊是被導入時,代碼塊不被運行。 run() 輸出: 請輸入要訪問的url:login 登錄頁面
從上面可以看出來,我們只能訪問一個模塊,如果增加一個模塊,我們需要去import裏面繼續添加,當然,python也想過這個問題,所以import也可以傳遞字符串
一個小小的測試:
#文件:commons.py def login(): print("登錄頁面") def logout(): print("退出頁面") def home(): print("主頁面") #文件:import_test.py obj = __import__("commons") obj.login() obj.logout() obj.home() 輸出: 登錄頁面 退出頁面 主頁面
python的學習之路day6