国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

python實(shí)現(xiàn)Decorator模式實(shí)例代碼

2020-02-22 23:11:57
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文研究的主要是python實(shí)現(xiàn)Decorator模式,具體介紹如下。

一般來(lái)說(shuō),裝飾器是一個(gè)函數(shù),接受一個(gè)函數(shù)(或者類)作為參數(shù),返回值也是也是一個(gè)函數(shù)(或者類)。首先來(lái)看一個(gè)簡(jiǎn)單的例子:

# -*- coding: utf-8 -*-def log_cost_time(func):  def wrapped(*args, **kwargs):    import time    begin = time.time()    try:      return func(*args, **kwargs)    finally:      print 'func %s cost %s' % (func.__name__, time.time() - begin)  return wrapped @log_cost_timedef complex_func(num):  ret = 0  for i in xrange(num):    ret += i * i  return ret#complex_func = log_cost_time(complex_func) if __name__ == '__main__':  print complex_func(100000) code snippet 0

代碼中,函數(shù)log_cost_time就是一個(gè)裝飾器,其作用也很簡(jiǎn)單,打印被裝飾函數(shù)運(yùn)行時(shí)間。

裝飾器的語(yǔ)法如下:

@decdef func():pass

本質(zhì)上等同于: func = dec(func)

在上面的代碼(code snippet 0)中,把line12注釋掉,然后把line18的注釋去掉,是一樣的效果。另外staticmethod和classmethod是兩個(gè)我們經(jīng)常在代碼中用到的裝飾器,如果對(duì)pyc反編譯,得到的代碼一般也都是 func = staticmthod(func)這種模式。當(dāng)然,@符號(hào)的形式更受歡迎些,至少可以少拼寫(xiě)一次函數(shù)名。

實(shí)例代碼

#-*-coding:utf-8-*-'''意圖:動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé)。比通過(guò)生成子類更為靈活'''from abc import ABCMetaclass Component():  __metaclass__ = ABCMeta  def __init__(self):    pass  def operation(self):    pass  class ConcreteComponent(Component):  def operation(self):    print 'ConcreteComponent operation...'class Decorator(Component):  def __init__(self, comp):    self._comp = comp  def operation(self):    passclass ConcreteDecorator(Decorator):  def operation(self):    self._comp.operation()    self.addedBehavior()  def addedBehavior(self):    print 'ConcreteDecorator addedBehavior...'        if __name__ == "__main__":   comp = ConcreteComponent()   dec = ConcreteDecorator(comp)   dec.operation()

結(jié)果

======================= RESTART: C:/Python27/0209.2.py =======================
ConcreteComponent operation...
ConcreteDecorator addedBehavior...
>>>

總結(jié)

以上就是本文關(guān)于python實(shí)現(xiàn)Decorator模式實(shí)例代碼的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 四子王旗| 洛宁县| 汝州市| 新闻| 江孜县| 青神县| 东方市| 南充市| 孝感市| 穆棱市| 望江县| 渝北区| 晋城| 孟津县| 赤城县| 新宾| 金堂县| 肥西县| 永德县| 涞源县| 乌苏市| 宜章县| 江都市| 万年县| 松潘县| 南雄市| 平安县| 长治县| 兴化市| 宁晋县| 泰来县| 应城市| 克什克腾旗| 马尔康县| 彝良县| 中卫市| 琼海市| 金平| 镇赉县| 安龙县| 甘泉县|