python通過實例講解反射機制
更新時間:2019年10月17日 11:40:11 作者:夢想一步登天
這篇文章主要介紹了python通過實例講解反射機制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
一、反射機制簡介:
- 通過字符串的形式導入模塊
- 通過字符串的形式,去模塊中尋找指定的函數,并執(zhí)行
- 規(guī)定用戶輸入格式 模塊名/函數名 通過__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.根據字符串的形式去對象(某個模塊)中操作其成員
實現(xiàn)思路:規(guī)定用戶輸入格式 模塊名/函數名 通過__import__的形式導入模塊,并通過 hasattr和getattr 檢查并獲取函數返回值。
"""
#通過用戶輸入的形式, 導入模塊
inp = input('請輸入需要導入的模塊名:')
#__import__用于以字符串的形式導入模塊
dd = __import__(inp)
#在模塊尋找函數并執(zhí)行函數
inp_func = input('請輸入需要執(zhí)行的函數:')
#getattr()用于以字符串的形式去某個模塊中尋找函數
tager_func = getattr(dd, inp_func)
#在獲取到的函數名后加()表示執(zhí)行函數
result = tager_func()
print(result)
代碼執(zhí)行結果:
請輸入需要導入的模塊名:test 請輸入需要執(zhí)行的函數:f2 我是F2,我被調用了
實例:基于反射模擬Web框架路由系統(tǒng)(一)
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框架路由系統(tǒng)
"""
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框架路由系統(tǒng)(二)
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')
代碼實現(xiàn)結果:
路徑正確時結果:

路徑不正確時結果:

實例:基于反射模擬Web框架路由系統(tǒng)(三)
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 -*-
#用戶輸入規(guī)則:模塊名/函數名
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與is?not區(qū)別用法基礎教程
這篇文章主要為大家介紹了Python身份運算符is與is?not區(qū)別用法基礎教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06

