python裝飾器測試 python裝飾器

2021-10-17 02:41:02 字數 934 閱讀 6003

一、了解下python裝飾器

套用個通用的說法,可以給被裝飾的物件(物件或函式)新增額外的功能~~~~

二、語法

咋用裝飾器?

使用 @語法糖

@testdeftest_case()print 「pass」

例子中,還缺少乙個test函式的定義,這裡先不寫。

如果有傳參的需求,python支援可變引數和關鍵字引數的,這就很靈活,test函式裡可以定義好,這樣可以靈活使用了。

可以通過裝飾器的引數來禁止或者允許是否使用裝飾器功能(如定義時加入開關引數)

三、更高階的用法

基本的懂了,看一些高階用法

1、python內建的裝飾器

有三個,類靜態方法,類方法和屬性方法

(插播下區別:靜態方法:不需建立物件,類直接呼叫,不會隱式傳遞self(所以使用時引數個數必須與定義的個數保持一致,否則報錯)

類方法:self是類本身,呼叫方法傳的值必須是類的公有屬性

屬性方法:變為私有屬性,比如某個屬性值通過一系列動作才返回結果,但過程不需了解,只需呼叫屬性------如果需要修改屬性,需要使用@property.setter再次裝飾)(幾種方法的描述可參考:

屬性有3個裝飾器:setter , getter , deleter 都是在property的基礎上做了封裝,經過property裝飾的函式返回不再是個函式,而是個property物件

四、其他

1、多個裝飾器的順序

多個裝飾器同時使用時,裝飾器的呼叫順序與@語法糖宣告的順序相反,最後執行函式本身;

需要注意內函式和外函式之間的語句不會裝飾到目標函式上,並且裝飾器返回函式

五、優缺點

1、優點:優雅,減少重複

2、引入的問題(缺點):

(1)位置錯誤可能引起異常

(2)錯誤的函式名和文件

(3)裝飾器不可以用在靜態方法和類方法上

測試python裝飾器decorator

coding utf 8 主題 測試python裝飾器的一些特性 def dec2 f print dec2 return lambda x bye,s x def dec f print inside dec print f call return lambda x hello,s x dec2 ...

python裝飾器 Python 裝飾器

簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...

python裝飾器 裝飾器

由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...