时间:2021-05-22
本文研究的主要是python实现Decorator模式,具体介绍如下。
一般来说,装饰器是一个函数,接受一个函数(或者类)作为参数,返回值也是也是一个函数(或者类)。首先来看一个简单的例子:
# -*- 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代码中,函数log_cost_time就是一个装饰器,其作用也很简单,打印被装饰函数运行时间。
装饰器的语法如下:
@decdef func():pass本质上等同于: func = dec(func) 。
在上面的代码(code snippet 0)中,把line12注释掉,然后把line18的注释去掉,是一样的效果。另外staticmethod和classmethod是两个我们经常在代码中用到的装饰器,如果对pyc反编译,得到的代码一般也都是 func = staticmthod(func)这种模式。当然,@符号的形式更受欢迎些,至少可以少拼写一次函数名。
实例代码
#-*-coding:utf-8-*-'''意图:动态地给一个对象添加一些额外的职责。比通过生成子类更为灵活'''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()结果
======================= RESTART: C:/Python27/0209.2.py =======================
ConcreteComponent operation...
ConcreteDecorator addedBehavior...
>>>
以上就是本文关于python实现Decorator模式实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Python使用logging结合decorator模式实现优化日志输出的方法。分享给大家供大家参考,具体如下:python内置的loging模块
本文实例讲述了Python装饰器(decorator)定义与用法。分享给大家供大家参考,具体如下:什么是装饰器(decorator)简单来说,可以把装饰器理解为
本文实例为大家分享了python单例模式的具体代码,供大家参考,具体内容如下多次实例化的结果指向同一个实例单例模式实现方式方式一:importsettingsc
本文实例讲述了PHP设计模式之装饰器模式定义与用法。分享给大家供大家参考,具体如下:什么是装饰器模式作为一种结构型模式,装饰器(Decorator)模式就是对一
在Python3环境下,调试实现了《大话设计模式》中简单工厂模式,通过定义单独的工厂类,完成对具体的产品的实例化,参考链接具体实现见代码:#!/usr/bin/