python 裝飾器 元類

裝飾器

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()

元類

元類是一個類的類。就像一個類定義一個類的實例的行為一樣,元類定義了一個類的行為。一個類是元類的一個實例。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,281評論 25 708
  • 有一個背影讓你想流淚,那是父親的背影。有一個背影讓我很心酸,這是我一位老師的背影。 人間多苦難,最苦相思無處道。這...
    _光亮_閱讀 331評論 3 5
  • 人們都說,好好學習,天天向上。 天天向上,現(xiàn)在,快變成天天向下了。 確實有一點,學會的東西,過一段時間如果,不加強...
    李明濤閱讀 183評論 0 0
  • 我從沒想到我現(xiàn)在變得這樣,變得如此焦燥浮夸,不切實際。我的經歷不應該這樣不應該讓我變得如此頹廢,而我竟然變成...
    夜殤沉風閱讀 372評論 0 1
  • 那一年,我初一,遇見她,她說她叫青秋。 我們分在一個班,還是同桌,看著她臉上清純無暇的笑,我知道,我的心淪陷了。 ...
    3d41a106efe2閱讀 218評論 0 1

友情鏈接更多精彩內容