AOP,就是面向切面導向程式設計,簡單的說,就是動態地將代碼切入到類的指定方法、指定位置上的編程思想就是面向切面的編程。
我們管切入到指定類指定方法的程式碼片段稱爲切面,而切入到哪些類、哪些方法則叫切入點。這樣我們就可以把幾個類別共有的程式碼,抽取到一個切片中,等到需要時再切入物件中去,從而改變其原有的行爲。
這種思想,可以使原有程式碼邏輯更清晰,對原有程式碼毫無入侵性,常用於像權限管理,日誌記錄,事物管理等等。
而 Python 中的裝飾器就是很著名的設計,常用於有切面需求的場景。
類如,Django 中就大量使用裝飾器去完成一下切面需求,如權限控制,內容過濾,請求管理等等。
Python 裝飾器(fuctional decorators)就是用於拓展原來函式功能的一種函式,目的是在不改變原函式名或類名的情況下,給函式增加新的功能。
比如,我們要在函式執行前和執行後分別執行一些別的操作,那麼根據上面函式可以作爲參數傳遞,我們可以這樣實現,看下面範例:
如果函式有回傳值,那裝飾器函式也必須有回傳值,例如:
如果函式有參數,那裝飾器函式也必須加上參數:
經過裝飾器裝飾後的函式a,實際上已經變成了裝飾器函式 c
中定義的函式 b