彩世界平台-彩世界时时app-彩世界开奖app苹果下载

热门关键词: 彩世界平台,彩世界时时app,彩世界开奖app苹果下载

您的位置:彩世界平台 > 彩世界平台 > python实现Decorator模式实例代码,pythondecorator

python实现Decorator模式实例代码,pythondecorator

发布时间:2019-08-31 09:58编辑:彩世界平台浏览(94)

    python实现Decorator模式实例代码,pythondecorator

    本文研究的主要是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_time
    def 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就是一个装饰器,其作用也很简单,打印被装饰函数运行时间。

    装饰器的语法如下:

    @dec
    
    def func():pass
    

    本质上等同于:func = dec(func)

    在上面的代码(code snippet 0)中,把line12注释掉,然后把line18的注释去掉,是一样的效果。另外staticmethod和classmethod是两个我们经常在代码中用到的装饰器,如果对pyc反编译,得到的代码一般也都是func = staticmthod(func)这种模式。当然,@符号的形式更受欢迎些,至少可以少拼写一次函数名。

    实例代码

    #-*-coding:utf-8-*-
    
    
    '''
    意图:动态地给一个对象添加一些额外的职责。比通过生成子类更为灵活
    '''
    from abc import ABCMeta
    
    class 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):
        pass
    
    class 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模式,具体介绍如下。

    总结

    以上就是本文关于python实现Decorator模式实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

    本文研究的主要是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_time
    def 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就是一个装饰器,其作用也很简单,打印被装饰函数运行时间。

    装饰器的语法如下:

    @dec
    
    def func():pass
    

    本质上等同于:func = dec(func)

    本文由彩世界平台发布于彩世界平台,转载请注明出处:python实现Decorator模式实例代码,pythondecorator

    关键词: