国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python Decorator裝飾器的創(chuàng)建方法及常用場(chǎng)景分析

89542767 / 364人閱讀

  小編寫(xiě)這篇文章的一個(gè)主要目的,主要是來(lái)給大家詳細(xì)解答一些關(guān)于Python Decorator的相關(guān)知識(shí),涉及到的內(nèi)容主要是關(guān)于裝飾器的一些介紹,比如,裝飾器的一些常見(jiàn)創(chuàng)建方法,還有一些具體的場(chǎng)景,下面就給大家詳細(xì)解答下。


  前言


  1.裝飾器本質(zhì)是一個(gè)語(yǔ)法糖,是對(duì)被裝飾方法或類進(jìn)行的功能擴(kuò)充,是一種面向切面的實(shí)現(xiàn)方法


  2.裝飾器可以分成方法裝飾器和類裝飾器,他們的區(qū)別是一個(gè)是用函數(shù)實(shí)現(xiàn)的裝飾器,一個(gè)是用類實(shí)現(xiàn)的裝飾器,他們也都能在方法和類上進(jìn)行裝飾


  3.類裝飾器看起來(lái)結(jié)構(gòu)更加清晰,因此下面的代碼實(shí)現(xiàn)的裝飾器全是類裝飾器


  一、創(chuàng)建方式


  1.創(chuàng)建“裝飾方法”的類裝飾器


  from functools import wraps
  #裝飾器類
  class MyDecorator(object):
  def __init__(self,plusNum):
  self.plusNum=plusNum#裝飾器入?yún)?  def __call__(self,func):
  wraps(func)#wraps保證裝飾器不改變被裝飾方法的原有函數(shù)結(jié)構(gòu)
  def wrapped_function(*args,**kwargs):
  #調(diào)用被裝飾方法前執(zhí)行一些操作---------------
  #如果不加wraps,此處打印結(jié)果將是
  funcName=func.__name__
  print("funcName:{}".format(funcName))
  #---------------------------------------
  #修改被裝飾方法的入?yún)?-
  num1=args[0]+2
  num2=args[1]+3
  args=(num1,num2)
  #-------------------
  #執(zhí)行被裝飾方法-------------
  res=func(*args,**kwargs)
  #-------------------------
  #調(diào)用被裝飾方法后執(zhí)行一些操作-------------
  print("do something after the func...")
  #-------------------------------------
  #修改被裝飾方法的出參--
  res+=self.plusNum
  #-------------------
  #返回被裝飾方法的參數(shù)
  return res
  #返回裝飾器方法
  return wrapped_function
  #被裝飾的方法
  MyDecorator(3)
  def add(num1,num2):
  return num1+num2
  if __name__=='__main__':
  #整體執(zhí)行流程:
  #1.打印add方法名
  #2.修改被裝飾方法入?yún)?  #3.執(zhí)行被裝飾方法
  #4.調(diào)用被裝飾方法后執(zhí)行一些操作
  #5.修改被裝飾方法的出參
  #6.打印結(jié)果
  print(add(5,3))
  #funcName:add
  #do something after the func...
  #16


  2.創(chuàng)建“裝飾類中方法”的類裝飾器


  from functools import wraps
  #裝飾器類
  class MyDecorator(object):
  def __init__(self,plusNum):
  self.plusNum=plusNum#裝飾器入?yún)?  def __call__(self,func):
  wraps(func)#wraps保證裝飾器不改變被裝飾方法的原有函數(shù)結(jié)構(gòu)
  def wrapped_function(*args,**kwargs):
  #此處與直接裝飾方法相同
  #調(diào)用被裝飾方法前執(zhí)行一些操作---------------
  #如果不加wraps,此處打印結(jié)果將是
  funcName=func.__name__
  print("funcName:{}".format(funcName))
  #---------------------------------------
  #此處需要注意,如果需要修改入?yún)⒌闹担敲磦鲄⒌乃饕菑?開(kāi)始而不是從0開(kāi)始,因?yàn)榈谝粋€(gè)入?yún)⒌闹凳菍?shí)例本身self
  #修改被裝飾方法的入?yún)?-
  num1=args[1]+2
  num2=args[2]+3
  args=(args[0],num1,num2)
  #-------------------
  #此處與直接裝飾方法相同
  #執(zhí)行被裝飾方法-------------
  res=func(*args,**kwargs)
  #-------------------------
  #此處與直接裝飾方法相同
  #調(diào)用被裝飾方法后執(zhí)行一些操作-------------
  print("do something after the func...")
  #-------------------------------------
  #此處與直接裝飾方法相同
  #修改被裝飾方法的出參--
  res+=self.plusNum
  #-------------------
  #返回被裝飾方法的參數(shù)
  return res
  #返回裝飾器方法
  return wrapped_function
  class Operation(object):
  #被裝飾的類方法
  MyDecorator(3)
  def add(self,num1,num2):
  return num1+num2
  if __name__=='__main__':
  op=Operation()
  print(op.add(3,5))
  #funcName:add
  #do something after the func...
  #16

  3.創(chuàng)建“裝飾類”的類裝飾器


  from functools import wraps
  #裝飾器類
  class MyDecorator(object):
  def __init__(self,plusNum):
  self.plusNum=plusNum#裝飾器入?yún)?  def __call__(self,Cls):
  wraps(Cls)#wraps保證裝飾器不改變被裝飾類的原有結(jié)構(gòu)
  def wrapped_function(*args,**kwargs):
  #調(diào)用被裝飾類前執(zhí)行一些操作---------------
  #如果不加wraps,此處打印結(jié)果將是
  clsName=Cls.__name__
  print("clsName:{}".format(clsName))
  #---------------------------------------
  #修改被裝飾類的入?yún)?--
  num1=args[0]+2
  num2=args[1]+3
  args=(num1,num2)
  #-------------------
  #初始化被裝飾類-------------
  cls=Cls(*args,**kwargs)
  #-------------------------
  #初始化后執(zhí)行一些操作--------------------
  print("do something after the func...")
  #-------------------------------------
  #給類實(shí)例增加增加屬性和方法---------------------
  cls.mul=3#增加屬性
  cls.plusNumber=self.plusNumber#增加方法
  #-------------------------------------------
  #返回實(shí)例
  return cls
  #返回裝飾器方法
  return wrapped_function
  def plusNumber(self,num):
  return num+self.plusNum
  #被裝飾的類
  MyDecorator(3)
  class Operation(object):
  def __init__(self,num1,num2):
  self.num1=num1
  self.num2=num2
  def add(self):
  num3=self.num1+self.num2
  num4=self.plusNumber(num3*self.mul)#使用裝飾器插入的屬性和方法
  return num4
  if __name__=='__main__':
  #整體執(zhí)行流程:
  #1.打印Operation類名
  #2.修改類的初始化參數(shù)
  #3.初始化類
  #4.初始化完成后執(zhí)行一些方法
  #5.給初始化的實(shí)例新增mul屬性和plusNumber方法
  #6.實(shí)例執(zhí)行add函數(shù)并調(diào)用新增的裝飾函數(shù)和裝飾屬性
  #7.輸出結(jié)果
  op=Operation(3,5)
  print(op.add())
  #clsName:Operation
  #do something after the func...
  #42


  二、常用場(chǎng)景


  1.記錄日志

  #todo


  2.性能測(cè)試

  #todo


  3.循環(huán)執(zhí)行

  #todo


  4.攔截器


  #todo

  5.數(shù)據(jù)預(yù)處理(數(shù)據(jù)清洗)


 

 #todo


  6.功能植入

  #todo


  綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)?lái)幫助。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/128395.html

相關(guān)文章

  • Python知識(shí)點(diǎn):理解和使用裝飾器 @decorator

    摘要:使用類裝飾器,優(yōu)點(diǎn)是靈活性大,高內(nèi)聚,封裝性。不過(guò)不用擔(dān)心,有,本身也是一個(gè)裝飾器,它的作用就是把原函數(shù)的元信息拷貝到裝飾器函數(shù)中,使得裝飾器函數(shù)也有和原函數(shù)一樣的元信息。 showImg(https://segmentfault.com/img/bVbrFWb?w=742&h=484);Python的裝飾器(decorator)是一個(gè)很棒的機(jī)制,也是熟練運(yùn)用Python的必殺技之一。...

    cyqian 評(píng)論0 收藏0
  • 簡(jiǎn)單理解Python裝飾

    摘要:下面我們一起拋去無(wú)關(guān)概念,簡(jiǎn)單地理解下的裝飾器。用函數(shù)實(shí)現(xiàn)裝飾器裝飾器要求入?yún)⑹呛瘮?shù)對(duì)象,返回值是函數(shù)對(duì)象,嵌套函數(shù)完全能勝任。為了對(duì)調(diào)用方透明,裝飾器返回的對(duì)象要偽裝成被裝飾的函數(shù)。 來(lái)源:http://www.lightxue.com/under... ???????Python有大量強(qiáng)大又貼心的特性,如果要列個(gè)最受歡迎排行榜,那么裝飾器絕對(duì)會(huì)在其中。???????剛接觸裝飾器,會(huì)...

    Meils 評(píng)論0 收藏0
  • Python: 會(huì)打扮的裝飾

    摘要:一般情況下,我們使用裝飾器提供的語(yǔ)法糖,來(lái)簡(jiǎn)化上面的寫(xiě)法像上面的情況,可以動(dòng)態(tài)修改函數(shù)或類功能的函數(shù)就是裝飾器。本文標(biāo)題為會(huì)打扮的裝飾器本文鏈接為參考資料修飾器的函數(shù)式編程中的裝飾器介紹思誠(chéng)之道裝飾器入門(mén)與提高賴明星 裝飾器 我們知道,在 Python 中,我們可以像使用變量一樣使用函數(shù): 函數(shù)可以被賦值給其他變量 函數(shù)可以被刪除 可以在函數(shù)里面再定義函數(shù) 函數(shù)可以作為參數(shù)傳遞給另外...

    blastz 評(píng)論0 收藏0
  • 詳解Python裝飾

    摘要:概括的講,裝飾器的作用就是為已經(jīng)存在的函數(shù)或?qū)ο筇砑宇~外的功能。在理解這些裝飾器之前,最好對(duì)函數(shù)的閉包和裝飾器的接口約定有一定了解。是一個(gè)非常簡(jiǎn)單的裝飾器加強(qiáng)包。 Python中的裝飾器是你進(jìn)入Python大門(mén)的一道坎,不管你跨不跨過(guò)去它都在那里。 為什么需要裝飾器 我們假設(shè)你的程序?qū)崿F(xiàn)了say_hello()和say_goodbye()兩個(gè)函數(shù)。 def say_hello(): ...

    DandJ 評(píng)論0 收藏0
  • 【用故事解讀 MobX 源碼(四)】裝飾器 和 Enhancer

    摘要:所以這是一篇插隊(duì)的文章,用于去理解中的裝飾器和概念。因此,該的作用就是根據(jù)入?yún)⒎祷鼐唧w的描述符。其次局部來(lái)看,裝飾器具體應(yīng)用表達(dá)式是,其函數(shù)簽名和是一模一樣。等裝飾器語(yǔ)法,是和直接使用是等效等價(jià)的。 ================前言=================== 初衷:以系列故事的方式展現(xiàn) MobX 源碼邏輯,盡可能以易懂的方式講解源碼; 本系列文章: 《【用故事解...

    maybe_009 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<