今天要來跟大家聊聊一個很多人都會搞不懂的咚咚!
那就是我們的~~~~~ Decorator !
我們想像一下這個小情境
假設今天我們是一個有記帳好習慣的乖小孩(就像我 耶!)
每次花費我們都會希望自己做一下紀錄
那我們在花費的時候就要在螢幕上寫出
我花錢了!!
那我們會怎麼寫呢?
可是不覺得這樣每花一次前就要多寫一次很不方便嗎???
所以我們會希望能在每次花錢之前都自動記錄一下
“我花錢了!!"這件事
所以我們要用裝飾器裝飾一下!
先用最簡單的版本寫一下
在開始花錢之前我就先用 record_bill 來修是我的function
在 record_bill 裡面的 f 就代表傳進去的 spend_money!!
為什麼呢?
因為@record_bill的意思就是
spend_money = record_bill(spend_money)
可以看到在真正呼叫f(就是spend_money)前我就先說了"我花錢啦!!"
這樣如果要做很多次spend_money的話就不用一直重複寫那行print啦
可是不覺得哪裡怪怪的嗎?
這樣money不是固定只能扣100嗎?!
這樣跟真正的記帳根本不一樣啊!!!
所以我們需要的是一個可以傳參數的 裝飾器 啦!!
這樣的話需要在多一層的function去接收額外的參數喔!!
這樣是不是就比較正常一些了呢!!!更像一般的記帳了吧!!
最近研究了一下自己寫 Decorator 要怎麼寫所以就來記錄順邊分享一下想法了~
但是其實自己寫裝飾器有一個比較雷的地方就是在做logging的時候呼叫 function name的話會有問題,這時候就會需要用到別人已經寫好的套件 funtools 來幫助我們改善。
至於 funtools 的心得我就下一篇再介紹吧~~~
不知道大家是不是比較了解一些了呢?
如果有問題的話歡迎在底下留言喔!
那我們下次再見啦~
參考資料:
http://ot-note.logdown.com/posts/67571/-decorator-with-without-arguments-in-function-class-form