淺談使用Python內(nèi)置函數(shù)getattr實現(xiàn)分發(fā)模式
本文研究的主要是使用Python內(nèi)置函數(shù)getattr實現(xiàn)分發(fā)模式的相關(guān)問題,具體介紹如下。
getattr 常見的使用模式是作為一個分發(fā)者。舉個例子,如果你有一個程序可以以不同的格式輸出數(shù)據(jù),你可以為每種輸出格式定義各自的格式輸出函數(shù),然后使用唯一的分發(fā)函數(shù)調(diào)用所需的格式輸出函數(shù)。
例如,讓我們假設(shè)有一個以 HTML、XML 和普通文本格式打印站點統(tǒng)計的程序。輸出格式在命令行中指定,或者保存在配置文件中。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ù)。這種方式允許今后很容易的擴展程序以支持其它的輸出格式,而且無需修改分發(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實現(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實現(xiàn)工廠模式
- Python通過getattr函數(shù)獲取對象的屬性值
相關(guān)文章
python數(shù)組轉(zhuǎn)換為矩陣的方法實現(xiàn)
本文主要介紹了python數(shù)組轉(zhuǎn)換為矩陣的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07python實現(xiàn)單鏈表中刪除倒數(shù)第K個節(jié)點的方法
這篇文章主要為大家詳細介紹了python實現(xiàn)單鏈表中刪除倒數(shù)第K個節(jié)點的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09python中tkinter的應(yīng)用:修改字體的實例講解
今天小編就為大家分享一篇python中tkinter的應(yīng)用:修改字體的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07