Python裝飾器decorator的簡易教程
在Python加peewee讓資料庫訪問更簡單一文中有幾個函式需要連線資料庫,這樣就導致了一些重複程式碼

1.png
有過Java Spring開發經驗的同學就要跳出來了,這樣不簡潔,Spring早就可以AOP了,根本不用操心資料庫連線的問題。Python當然可以啊,而且是語言級別就已經支援了,這個功能叫decorator,中文都叫裝飾器。有沒有想起什麼?對了,這就是設計模式裡的decorator模式
我們建立一個新方法,在方法內再建個wrapper方法,雖然感覺很奇怪,但就是這麼寫的。當然這兩個方法名可以隨便起了,樣式一致即可

2.png
func 就是要被修飾的方法,做為一個引數傳入到db_connect方法裡,我們就可以在func前面連線資料庫就好。最後返回wrapper。這也是python比較特別的地方,方法是可以作為引數傳來傳去的。這比Java只能在類級別的反射上做文章吧,一個簡單的功能也需要建個類
最後我們在每個需要連線資料庫的函式名前加上@db_connect就可以了。每個函式都會自動連線資料庫。又有同學說了,這有什麼區別,行數沒變啊。但這樣你不覺得核心程式碼更簡潔了嗎?不需要操心資料庫連線的問題了。同樣你還可以在db_connect里加些日誌或者事務連線什麼的,這樣就是全域性性的改變了,不用你每個函式都去修改一遍。
其實這就是Python超程式設計,也就是在你的程式碼上再程式設計去操作你的程式碼,雖然聽著有點呦口,但是做到後很爽。 有興趣的同學可以看下Python的官方文件。