裝飾類方法
裝飾類物件方法
裝飾類functools 方法
類內建的裝飾器
python基礎-裝飾器高階
這篇部落格是學習各個方面的裝飾器,諸如裝飾方法、類、類方法、裝飾器庫functools
裝飾函式的裝飾器,就是為某個函式的執行前後,或者函式引數,進而對被裝飾的函式產生影響作用
def
(method):
definner
(a, b):
print("before...")
a = a + 1
b = b + 1
ret = method(a, b)
print("after...")
return ret
return inner
defmethod
(a, b):
print("run method")
return a + b
print(ret)
最終結果輸出如下:
before...
run method
after...
5
以上裝飾器我們還可以新增語法糖的方式,如下
def
(method):
definner
(a, b):
print("before...")
a = a + 1
b = b + 1
ret = method(a, b)
print("after...")
return ret
return inner
defmethod
(a, b):
print("run method")
return a + b
ret = method(1,2)
print(ret)
輸出結果沒有改變
以上裝飾器是裝飾了乙個函式,既然是函式,那我們看下能不能,裝飾類中的某個方法呢?
類中方法分為類方法,類物件方法
裝飾類方法不含語法糖
以下是裝飾類方法,從而在類呼叫operate
方法時候,進行修改操作
class
foo():
a = 1
b = 2
defoperate
(self, a, b):
print("run operate")
return a + b
def(operate):
definner
(self, a, b):
print("before...")
a += 1
b += 1
ret = operate(self, a, b)
print("after...")
return ret
return inner
print(ret)
輸出如下:
run operate
after...
5裝飾類方法含語法糖
我們繼續優化,由於裝飾器修飾普通函式,可以用語法糖,那麼我們整個例子,能不能使用下語法糖呢?答案是可以的,請看如下**
def
(operate):
definner
(self, a, b):
print("before...")
a += 1
b += 1
ret = operate(self, a, b)
print("after...")
return ret
return inner
class
foo():
a = 1
b = 2
defoperate
(self, a, b):
print("run operate")
return a + b
ret = foo.operate(foo, 1, 2)
print(ret)
輸出如下:
run operate
after...5
以上是對類方法進行的裝飾,下面我們來看下對類物件方法看看能不能裝飾呢?
裝飾類物件方法不含語法糖
class
foo():
defoperate
(self,a,b):
print("run operate")
return a+b
def(operate):
definner
(a,b):
print("before...")
a += 1
b += 1
ret = operate(a, b)
print("after...")
return ret
return inner
foo = foo()
print(ret)
輸出如下:
run operate
after...
5裝飾類物件方法含語法糖
那麼我們就繼續利用語法糖來裝飾類物件的方法
def
(operate):
definner
(self,a,b):
print("before...")
a += 1
b += 1
ret = operate(self,a, b)
print("after...")
return ret
return inner
class
foo():
defoperate
(self,a,b):
print("run operate")
return a+b
foo = foo()
ret = foo.operate(1, 2)
print(ret)
輸出如下:
run operate
after...5
裝飾類不含語法糖
我們實現了裝飾修裝飾類方法,類物件方法,那麼接下來的直接裝飾就很容易了,如下**貼出來
class
foo():
defoperate
(self,a,b):
print("run operate")
return a+b
def(foo):
definner
(foo,a,b):
print("before...")
a+=1
b+=1
ret =foo.operate(foo,a,b)
print("after...")
return ret
return inner
print(ret)
輸出如下:
run operate
after...
5裝飾類含語法糖
我們修改下,裝飾類利用語法糖形式
def
(fooo):
definner
(foo,a,b):
print("before...")
a+=1
b+=1
ret =fooo.operate(fooo,a,b)
print("after...")
return ret
return inner
class
foo():
defoperate
(self,a,b):
print("run operate")
return a+b
ret = foo(foo,1,2)
print(ret)
輸出如下:
run operate
after...
5
from functools import wraps
def(method):
@wraps(method)
definner
(a,b):
a = a + 1
b = b + 1
print("before")
ret = method(a,b)
print("after")
return ret
return inner
defmethod
(a,b):
print("run method")
return a+b
rt = method(1,2)
print(rt)
輸出如下:
before
run method
after
5
functools該模組結合之前,我們使用的裝飾器普通函式,就很容易理解了~~
比如@abstractmethod、@property、 @classmethod、 @staticmethod
等 這裡就省略了
Python設計模式 裝飾器模式
基於3.5.2,如下 coding utf 8 裝飾器模式 class beverage name price 0.0 type beverage defgetprice self return self.price defsetprice self,price self.price price d...
Python設計模式 裝飾器模式
裝飾器模式,動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾器模式比生成子類更為靈活。示例 coding utf 8 裝飾器模式 class beverage name price 0.0 type beverage def getprice self return self.price d...
python裝飾器設計方法 裝飾器設計模式
本篇文章幫大家學習裝飾器設計模式,包含了裝飾器設計模式使用方法 操作技巧 例項演示和注意事項,有一定的學習價值,大家可以用來參考。裝飾器模式允許使用者在不改變其結構的情況下向現有物件新增新功能。這種型別的設計模式屬於結構模式,因為此模式充當現有類的包裝。這個模式建立了乙個裝飾器類,它封裝了原始類,並...