中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python如何通過實例了解反射機制

發布時間:2021-07-24 09:13:43 來源:億速云 閱讀:134 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關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')

代碼實現結果:

路徑正確時結果:

python如何通過實例了解反射機制

路徑不正確時結果:

python如何通過實例了解反射機制

實例:基于反射模擬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路徑調用結果:

python如何通過實例了解反射機制

當模塊和函數都不存在時,url路徑調用結果:

python如何通過實例了解反射機制

關于“python如何通過實例了解反射機制”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

康平县| 太康县| 历史| 古浪县| 南丰县| 大名县| 泰宁县| 平度市| 长兴县| 益阳市| 遂平县| 施秉县| 吉木乃县| 南陵县| 寻乌县| 乌恰县| 巴林左旗| 察雅县| 河源市| 青川县| 文山县| 越西县| 林口县| 扬州市| 吉隆县| 新化县| 深州市| 比如县| 资溪县| 工布江达县| 龙里县| 柘城县| 南郑县| 海阳市| 陕西省| 阿城市| 云阳县| 龙泉市| 灵川县| 兴仁县| 渭南市|