對於裝飾器Decorator的理解

2022-07-24 07:27:08 字數 1431 閱讀 1666

裝飾器是用來描述函式,記錄日誌,提供資訊的函式,是乙個為了更好的服務主函式的副函式:

詳情還需檢視:廖雪峰裝飾器

即可。】

下面是對兩道對應練習題的個人**編寫即記錄:

import

time, functools

defmetric(fn): # 這是decorator函式的定義,沒有過多要傳遞的資訊,兩層巢狀巢狀即可

@functools.wraps(fn)

print('

%s executed in %s ms

' % (fn.__name__, '

10.24'))

return fn(*args, **kw)

return

@metric #這是在定義主函式時呼叫decorator函式的方法

deffast(x, y):

time.sleep(0.0012)

return x +y

@metric

defslow(x, y, z):

time.sleep(0.1234)

return x * y *z

f = fast(11, 22)

s = slow(11, 22, 33)

if f != 33:

print('

測試失敗!')

elif s != 7986:

print('

測試失敗!

')

練習題2:請編寫乙個decorator,能在函式呼叫的前後列印出'begin call''end call'的日誌:

import

functools

defmetric(text1,text2): # 這裡不允許寫要服務的函式名

defdecorate(fn): # 要服務的函式名這裡寫

@functools.wraps(fn)

print('

%s %s:

' % (text1, fn.__name__

)) fn(*args, **kw)

print('

%s %s.

' % (text2, fn.__name__

))

return

return

decorate

@ metric(

'begin call

','end call

') # r如果在呼叫裝飾器時要個性化傳遞引數,裝飾器函式需要3層巢狀;注意這裡不能再寫good,已經@了。

defgood(x,y):

print(x+y)

good(2,3)

裝飾器模式 decorator

所有的說明和解釋都在 中有注釋來標明 package mode.decorator 這裡定義乙個介面,在介面中定義我們要執行的操作。以後所有的裝飾器以及我們要裝飾的物件都要實現這個介面。有了這樣的大前提,我們就可以其用 sourcable來定義我們的裝飾器和要裝飾的物件了 public inte c...

裝飾器模式 Decorator

設計原則 1 類應該對擴充套件開發,對修改關閉。特點 1 裝飾物件和真實物件有相同的介面。這樣客戶端物件就可以以和真實物件相同的方式和裝飾物件互動。2 裝飾物件包含乙個真實物件的引用 reference 3 裝飾物件接收所有來自客戶端的請求,它把這些請求 給真實的物件。4 裝飾物件可以在 這些請求之...

裝飾器模式(Decorator)

裝飾器模式的作用 動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾器模式比生成子類更加靈活。裝飾器模式結構圖 各個類或介面的職能 component是定義乙個物件介面,可以給這些物件增加功能。concretecomponent定義乙個具體的物件。decorator是裝飾抽象類,為物件增加功能...