python高手之路 筆記2裝飾器專題 簡(jiǎn)明易懂

python裝飾器

創(chuàng)建裝飾器

  • 裝飾器本質(zhì)上就是一個(gè)函數(shù),這個(gè)函數(shù)接收其他函數(shù)作為參數(shù),并將其以一個(gè)新的修改后的函數(shù)進(jìn)行替換。
  • 最簡(jiǎn)單的裝飾器就是本體函數(shù)(identify function)
def identify(f):
    #A#
    return f

然后就可以像下面這樣使用這個(gè)裝飾器:

@identify
def foo():
    return 'bar'

它和下面的過(guò)程類似:

def foo():
    return 'bar'
foo = identify(foo)

#A#處,可以把一批函數(shù)都需要進(jìn)行的操作都放在這,再用裝飾器的形式來(lái)裝飾那批函數(shù),來(lái)簡(jiǎn)化代碼。

注冊(cè)裝飾器

_functions = {}
def register(f):
global _functions
_functions[f.name] = foo
return foo

使用##

@register
def foo():
return 'bar'

- 在這個(gè)例子中,函數(shù)被注冊(cè)并存儲(chǔ)在一個(gè)字典里,以便后續(xù)可以根據(jù)函數(shù)名字提取函數(shù)

#### 裝飾器升級(jí)
- ```python
import functools
import inspect
def check_is_admin(f):
    @functools.wraps(f)
    #使用functools使返回的wrapper函數(shù)的屬性與原函數(shù)一致
    def wrapper(*args, **kwargs):
    #args得到函數(shù)傳參
        func_args = inspect.getcallargs(f, *args, **kwargs)
        #返回一個(gè)將參數(shù)名字和值作為鍵值對(duì)的字典,不論參數(shù)的傳遞方式
        if func_args.get('username') != 'admin':
            raise Exception("This user is not allowed to get food")
        return f(*args, **kwargs)
        #return時(shí)執(zhí)行函數(shù),返回函數(shù)返回值,有點(diǎn)混,注意
    return wrapper
##使用##
@check_is_admin
def get_food(username, type='chocolate'):
    return type + " nom nom nom!"

python方法類裝飾器

  • 在python3中不僅可以向方法傳入該類的任意實(shí)例,還可以傳入任何對(duì)象,只要它包含方法期望的屬性
  • 靜態(tài)方法 @staticmethod
  • 類方法@classmethod 第一個(gè)參數(shù)cls
  • 抽象方法 import abc; @abc.abstractmethod

其他

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,837評(píng)論 18 139
  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,877評(píng)論 0 38
  • 柏油路閉上了眼 小草便給畫(huà)上睫毛 夏天怕顏色太過(guò)單調(diào) 于是披上翠色衣裳 人說(shuō)鵝黃顯得稚嫩 我卻搖著頭走過(guò) 稚嫩算得...
    路人_賈閱讀 251評(píng)論 1 2
  • 1、界面布局 unity界面主要包括菜單欄、工具欄以及相關(guān)的視圖等內(nèi)容。 2、工具欄 圖2-1(1)Hand(手形...
    _涼笙閱讀 641評(píng)論 0 1
  • 17年7月1號(hào)畢業(yè)宿舍書(shū) 兩個(gè)月之前 9月14,大學(xué)舍友結(jié)婚。 2017年9月15凌晨0點(diǎn)30分。窗外淅淅瀝瀝下著...
    那年匆匆匆閱讀 363評(píng)論 0 1