# Python AOP切面導向程式設計 ### 什麼是 AOP AOP,就是面向切面導向程式設計,簡單的說,就是動態地將代碼切入到類的指定方法、指定位置上的編程思想就是面向切面的編程。 我們管切入到指定類指定方法的程式碼片段稱爲切面,而切入到哪些類、哪些方法則叫切入點。這樣我們就可以把幾個類別共有的程式碼,抽取到一個切片中,等到需要時再切入物件中去,從而改變其原有的行爲。 這種思想,可以使原有程式碼邏輯更清晰,對原有程式碼毫無入侵性,常用於像權限管理,日誌記錄,事物管理等等。 而 Python 中的裝飾器就是很著名的設計,常用於有切面需求的場景。 類如,Django 中就大量使用裝飾器去完成一下切面需求,如權限控制,內容過濾,請求管理等等。 ### 裝飾器 Python 裝飾器(fuctional decorators)就是用於拓展原來函式功能的一種函式,目的是在不改變原函式名或類名的情況下,給函式增加新的功能。 #### 函式裝飾器 比如,我們要在函式執行前和執行後分別執行一些別的操作,那麼根據上面函式可以作爲參數傳遞,我們可以這樣實現,看下面範例: ``` def c(func): def b(): print('在函式執行前,做一些操作') func() print("在函式執行後,做一些操作") return b @c def a(): print("I'm a") a() # 輸出結果: 在函式執行前,做一些操作 I'm a 在函式執行後,做一些操作 ``` 如果函式有回傳值,那裝飾器函式也必須有回傳值,例如: ```python= def c(func): def b(): print('在函數執行前,做一些操作') result = func() print("在函數執行後,做一些操作") return result return b @c def a(): print("函式執行中。。。") return "I'm a" print(a()) # 輸出結果: 在函式執行前,做一些操作 函式執行中。。。 在函式執行後,做一些操作 I'm a ``` 如果函式有參數,那裝飾器函式也必須加上參數: ```python= def c(func): def b(name, age): print('在函式執行前,做一些操作') result = func(name, age) print("在函式執行後,做一些操作") return result return b @c def a(name, age): print("函式執行中。。。") return "我是 {}, 今年{}歲 ".format(name, age) print(a('Amos', 24)) # 輸出結果: 在函式執行前,做一些操作 函數執行中。。。 在函式執行後,做一些操作 我是 Amos, 今年24歲 ``` 經過裝飾器裝飾後的函式a,實際上已經變成了裝飾器函式 `c` 中定義的函式 `b`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up