裝飾器
python裝飾器本質上就是一個函數(shù),它可以讓其他函數(shù)在不需要做任何代碼變動的前提下增加額外的功能,裝飾器的返回值也是一個函數(shù)對象(函數(shù)的指針)。
實質: 是一個函數(shù)
參數(shù):是你要裝飾的函數(shù)名(并非函數(shù)調用)
返回:是裝飾完的函數(shù)名(也非函數(shù)調用)
作用:為已經存在的對象添加額外的功能
特點:不需要對對象做任何的代碼上的變動
裝飾器作用
裝飾器最大的作用就是對于我們已經寫好的程序,我們可以抽離出一些雷同的代碼組建多個特定功能的裝飾器,這樣我們就可以針對不同的需求去使用特定的裝飾器,這時因為源碼去除了大量泛化的內容而使得源碼具有更加清晰的邏輯。
函數(shù)的函數(shù)裝飾器
import time
def decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
func()
end_time = time.time()
print(end_time - start_time)
return wrapper
@decorator
def func():
time.sleep(0.8)
func() # 函數(shù)調用
# 輸出:0.800644397735595
類方法的函數(shù)裝飾器
import time
def decorator(func):
def wrapper(me_instance):
start_time = time.time()
func(me_instance)
end_time = time.time()
print(end_time - start_time)
return wrapper
class Method(object):
@decorator
def func(self):
time.sleep(0.8)
p1 = Method()
p1.func() # 函數(shù)調用
通用裝飾器
def aa(fun):
def inner(*args,**kwargs):
print('啦啦')
return fun(*args,**kwargs)
return inner
有參通用裝飾器
def w(a):
def w1(fun):
def inner(*args,**kwargs):
if a == 1 :
print('驗證1')
elif a == 2:
print('驗證2')
return fun(*args,**kwargs)
return inner
retrn w1
@w(1)
def play (a,b):
print('現(xiàn)在是下午%d點%d分'%(a,b))
play(3,30)
@w(2)
def play1():
print('啦啦啦')
play1()
元類
元類是一個類的類。就像一個類定義一個類的實例的行為一樣,元類定義了一個類的行為。一個類是元類的一個實例。