欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python通過(guò)實(shí)例講解反射機(jī)制

 更新時(shí)間:2019年10月17日 11:40:11   作者:夢(mèng)想一步登天  
這篇文章主要介紹了python通過(guò)實(shí)例講解反射機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一、反射機(jī)制簡(jiǎn)介:

  • 通過(guò)字符串的形式導(dǎo)入模塊
  • 通過(guò)字符串的形式,去模塊中尋找指定的函數(shù),并執(zhí)行
  • 規(guī)定用戶輸入格式 模塊名/函數(shù)名 通過(guò)__import__的形式導(dǎo)入模塊,并通過(guò) hasattr和getattr 檢查并獲取函數(shù)返回值。

相關(guān)方法:

  • getattr:--根據(jù)字符串的形式去某個(gè)模塊中尋找東西
  • hasattr:--根據(jù)字符串的形式去某個(gè)模塊中判斷東西是否存在
  • setattr:--根據(jù)字符串的形式去某個(gè)模塊中設(shè)置東西
  • delattr:--根據(jù)字符串的形式去某個(gè)模塊中刪除東西

二、反射機(jī)制初識(shí):

test.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

def f1():
return '我是F1,我被調(diào)用了'

def f2():
return '我是F2,我被調(diào)用了'

def f3():
return '我是F3,我被調(diào)用了'

index.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
反射機(jī)制
1.根據(jù)字符串的形式導(dǎo)入模塊。
2.根據(jù)字符串的形式去對(duì)象(某個(gè)模塊)中操作其成員 
實(shí)現(xiàn)思路:規(guī)定用戶輸入格式 模塊名/函數(shù)名 通過(guò)__import__的形式導(dǎo)入模塊,并通過(guò) hasattr和getattr 檢查并獲取函數(shù)返回值。
"""
#通過(guò)用戶輸入的形式, 導(dǎo)入模塊
inp = input('請(qǐng)輸入需要導(dǎo)入的模塊名:')
#__import__用于以字符串的形式導(dǎo)入模塊
dd = __import__(inp)
#在模塊尋找函數(shù)并執(zhí)行函數(shù)
inp_func = input('請(qǐng)輸入需要執(zhí)行的函數(shù):')
#getattr()用于以字符串的形式去某個(gè)模塊中尋找函數(shù)
tager_func = getattr(dd, inp_func)
#在獲取到的函數(shù)名后加()表示執(zhí)行函數(shù)
result = tager_func()
print(result)

代碼執(zhí)行結(jié)果:

請(qǐng)輸入需要導(dǎo)入的模塊名:test
請(qǐng)輸入需要執(zhí)行的函數(shù):f2
我是F2,我被調(diào)用了

實(shí)例:基于反射模擬Web框架路由系統(tǒng)(一)

commons.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

def login():
return 'login'

def logout():
return 'logout'

def nb():
return '很牛逼的網(wǎng)頁(yè)'

refec_demo.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
基于反射模擬web框架路由系統(tǒng)
"""
from lib import commons
url = input('請(qǐng)輸入模擬的url路徑:')
if url.endswith('login'):
ret = commons.login()
print(ret)
elif url.endswith('logout'):
ret = commons.logout()
print(ret)
else:
print('404')

實(shí)例:基于反射模擬Web框架路由系統(tǒng)(二)

refec_demo1.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from lib import commons

inp = input('請(qǐng)輸入模擬的url路徑:')
url_inp = inp.split('/')[-1]
if hasattr(commons, url_inp):
ret = getattr(commons, url_inp)
result = ret()
print(result)
else:
print('404')

代碼實(shí)現(xiàn)結(jié)果:

路徑正確時(shí)結(jié)果:

路徑不正確時(shí)結(jié)果:

實(shí)例:基于反射模擬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ī)則:模塊名/函數(shù)名

url = input('請(qǐng)輸入模塊名/函數(shù)名:')
target_modul, target_func = url.split('/')
#__import__導(dǎo)入模塊
mod = __import__('lib.' + target_modul, fromlist=True)
#hasattr()判斷函數(shù)是否存在
if hasattr(mod, target_func):
ret = getattr(mod, target_func)
result = ret()
print(result)
else:
print('404')

當(dāng)模塊和函數(shù)都存在時(shí),url路徑調(diào)用結(jié)果:

當(dāng)模塊和函數(shù)都不存在時(shí),url路徑調(diào)用結(jié)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論