您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關python如何通過實例了解反射機制,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
一、反射機制簡介:
通過字符串的形式導入模塊
通過字符串的形式,去模塊中尋找指定的函數,并執行
規定用戶輸入格式 模塊名/函數名 通過__import__的形式導入模塊,并通過 hasattr和getattr 檢查并獲取函數返回值。
相關方法:
getattr:--根據字符串的形式去某個模塊中尋找東西
hasattr:--根據字符串的形式去某個模塊中判斷東西是否存在
setattr:--根據字符串的形式去某個模塊中設置東西
delattr:--根據字符串的形式去某個模塊中刪除東西
二、反射機制初識:
test.py
#!/usr/bin/env python # -*- coding:utf-8 -*- def f1(): return '我是F1,我被調用了' def f2(): return '我是F2,我被調用了' def f3(): return '我是F3,我被調用了'
index.py
#!/usr/bin/env python # -*- coding:utf-8 -*- """ 反射機制 1.根據字符串的形式導入模塊。 2.根據字符串的形式去對象(某個模塊)中操作其成員 實現思路:規定用戶輸入格式 模塊名/函數名 通過__import__的形式導入模塊,并通過 hasattr和getattr 檢查并獲取函數返回值。 """ #通過用戶輸入的形式, 導入模塊 inp = input('請輸入需要導入的模塊名:') #__import__用于以字符串的形式導入模塊 dd = __import__(inp) #在模塊尋找函數并執行函數 inp_func = input('請輸入需要執行的函數:') #getattr()用于以字符串的形式去某個模塊中尋找函數 tager_func = getattr(dd, inp_func) #在獲取到的函數名后加()表示執行函數 result = tager_func() print(result)
代碼執行結果:
請輸入需要導入的模塊名:test 請輸入需要執行的函數:f2 我是F2,我被調用了
實例:基于反射模擬Web框架路由系統(一)
commons.py
#!/usr/bin/env python # -*- coding:utf-8 -*- def login(): return 'login' def logout(): return 'logout' def nb(): return '很牛逼的網頁'
refec_demo.py
#!/usr/bin/env python # -*- coding:utf-8 -*- """ 基于反射模擬web框架路由系統 """ from lib import commons url = input('請輸入模擬的url路徑:') if url.endswith('login'): ret = commons.login() print(ret) elif url.endswith('logout'): ret = commons.logout() print(ret) else: print('404')
實例:基于反射模擬Web框架路由系統(二)
refec_demo1.py
#!/usr/bin/env python # -*- coding:utf-8 -*- from lib import commons inp = input('請輸入模擬的url路徑:') url_inp = inp.split('/')[-1] if hasattr(commons, url_inp): ret = getattr(commons, url_inp) result = ret() print(result) else: print('404')
代碼實現結果:
路徑正確時結果:
路徑不正確時結果:
實例:基于反射模擬Web框架路由系統(三)
manager.py
#!/usr/bin/env python # -*- coding:utf-8 -*- def home(): return 'Home'
order.py
#!/usr/bin/env python # -*- coding:utf-8 -*- def add_order(): return '添加訂單'
refec_demo2.py
#!/usr/bin/env python # -*- coding:utf-8 -*- #用戶輸入規則:模塊名/函數名 url = input('請輸入模塊名/函數名:') target_modul, target_func = url.split('/') #__import__導入模塊 mod = __import__('lib.' + target_modul, fromlist=True) #hasattr()判斷函數是否存在 if hasattr(mod, target_func): ret = getattr(mod, target_func) result = ret() print(result) else: print('404')
當模塊和函數都存在時,url路徑調用結果:
當模塊和函數都不存在時,url路徑調用結果:
關于“python如何通過實例了解反射機制”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。