<kbd id='woaibaidu'></kbd><address id='woaibaidu'><style id='woaibaidu'></style></address><button id='woaibaidu'></button>

          当前位置:主页 > 脚本专栏 > python >
            python实现Decorator模式实例代码
            2018-02-12 22:08 发布 次浏览

          本文研讨的次要是python完成Decorator形式,详细引见以下。

          普通来讲,装潢器是1个函数,承受1个函数(或许类)作为参数,前往值也是也是1个函数(或许类)。首先来看1个复杂的例子:

          # -*- coding: utf⑻ -*-
          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就是1个装潢器,其作用也很复杂,打印被装潢函数运转工夫。

          装潢器的语法以下:

          @dec
          
          def func():pass

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

          在下面的代码(code snippet 0)中,把line12正文掉,然后把line18的正文去掉,是1样的效果。另外staticmethod和classmethod是两个我们常常在代码中用到的装潢器,假如对pyc反编译,失掉的代码普通也都是 func = staticmthod(func)这类形式。固然,@符号的方式更受欢送些,至多可以少拼写1次函数名。

          实例代码

          #-*-coding:utf⑻-*-
          
          
          '''
          意图:静态地给1个工具添加1些额定的职责。比经过生成子类更加灵敏
          '''
          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形式实例代码的全部内容,希望对各人有所协助。感兴味的冤家可以持续参阅本站其他相干专题,如有缺乏的地方,欢送留言指出。感激冤家们对本站的支持!