淺談使用Python內(nèi)置函數(shù)getattr實(shí)現(xiàn)分發(fā)模式
本文研究的主要是使用Python內(nèi)置函數(shù)getattr實(shí)現(xiàn)分發(fā)模式的相關(guān)問題,具體介紹如下。
getattr 常見的使用模式是作為一個分發(fā)者。舉個例子,如果你有一個程序可以以不同的格式輸出數(shù)據(jù),你可以為每種輸出格式定義各自的格式輸出函數(shù),然后使用唯一的分發(fā)函數(shù)調(diào)用所需的格式輸出函數(shù)。
例如,讓我們假設(shè)有一個以 HTML、XML 和普通文本格式打印站點(diǎn)統(tǒng)計(jì)的程序。輸出格式在命令行中指定,或者保存在配置文件中。statsout 模塊定義了三個函數(shù):output_html、output_xml 和 output_text。然后主程序定義了唯一的輸出函數(shù),如下:
import statsout def output(data, format="text"): output_function = getattr(statsout, "output_%s" % format) return output_function(data)
output 函數(shù)接收一個必備參數(shù) data,和一個可選參數(shù) format。如果沒有指定 format 參數(shù),其缺省值是 text 并完成普通文本輸出函數(shù)的調(diào)用。
你可以連接 format 參數(shù)值和 "output_" 來創(chuàng)建一個函數(shù)名稱作為參數(shù)值,然后從 statsout 模塊中取得該函數(shù)。這種方式允許今后很容易的擴(kuò)展程序以支持其它的輸出格式,而且無需修改分發(fā)函數(shù)。所要做的僅僅是向 statsout 中添加一個函數(shù),比如 output_pdf,之后只要將 “pdf” 作為 format 的參數(shù)值傳遞給 output 函數(shù)即可。
現(xiàn)在你可以簡單的調(diào)用輸出函數(shù)就像調(diào)用其它函數(shù)一樣了。output_function 變量是指向 statsout 模塊中相應(yīng)函數(shù)的引用。
你是否發(fā)現(xiàn)前面示例的一個 Bug?即字符串和函數(shù)之間的松耦合,而且沒有錯誤檢查。如果用戶傳入一個格式參數(shù),但是在 statsout 中沒有定義相應(yīng)的格式輸出函數(shù),會發(fā)生什么呢?還好,getattr 會返回 None,它會取代一個有效函數(shù)并被賦值給 output_function,然后下一行調(diào)用函數(shù)的語句將會失敗并拋出一個異常。這種方式不好。值得慶幸的是,getattr 能夠使用可選的第三個參數(shù),一個缺省返回值。
總結(jié)
以上就是本文關(guān)于淺談使用Python內(nèi)置函數(shù)getattr實(shí)現(xiàn)分發(fā)模式的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
- python中hasattr()、getattr()、setattr()函數(shù)的使用
- 詳解Python的hasattr() getattr() setattr() 函數(shù)使用方法
- 詳解Python3 中hasattr()、getattr()、setattr()、delattr()函數(shù)及示例代碼數(shù)
- 淺談python中的getattr函數(shù) hasattr函數(shù)
- Python中g(shù)etattr函數(shù)和hasattr函數(shù)作用詳解
- python中的內(nèi)置函數(shù)getattr()介紹及示例
- python中g(shù)etattr函數(shù)使用方法 getattr實(shí)現(xiàn)工廠模式
- Python通過getattr函數(shù)獲取對象的屬性值
相關(guān)文章
python通過百度地圖API獲取某地址的經(jīng)緯度詳解
這篇文章主要給大家介紹了關(guān)于python通過百度地圖API獲取某地址的經(jīng)緯度的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
關(guān)于python中密碼加鹽的學(xué)習(xí)體會小結(jié)
這篇文章主要介紹了關(guān)于python中密碼加鹽的學(xué)習(xí)體會小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
手把手教你搭建python+selenium自動化環(huán)境(圖文)
本文主要介紹了手把手教你搭建python+selenium自動化環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
Python實(shí)現(xiàn)腳本轉(zhuǎn)換為命令行程序
使用Python中的scaffold和click庫,你可以將一個簡單的實(shí)用程序升級為一個成熟的命令行界面工具,本文就來帶你看看具體實(shí)現(xiàn)方法,感興趣的可以了解下2022-09-09

