python 类装饰器

1 装饰器无参数

class tracer: 

    def __init__(self,func): 

        self.calls = 0 

        self.func = func 

    def __call__(self,*args): 

        self.calls += 1 

        print('call %s to %s' %(self.calls, self.func.__name__)) 

        self.func(*args) 

 

@tracer

def spam(a, b, c): 

    print(a + b + c) 

 

 

spam(1,2,3)

 

2 装饰器带参数

class tracer:  

    def __init__(self, *args):  

        self.calls = 0

        self.args = args

     

    def __call__(self, func):

        self.func = func

        def realfunc(*args):

              self.calls += 1

              print('call %s to %s' %(self.calls, self.func.__name__))

              self.func(*args)

        return realfunc

 

@tracer("xxxx")

def spam(a, b, c):  

    print(a + b + c)  

 

spam(1,2,3)

 

spam(1,2,3)

class tracer:      def __init__(self,func):          self.calls = 0          self.func = func      def __call__(self,*args):          self.calls += 1          print('call %s to %s' %(self.calls, self.func.__name__))          self.func(*args)   @tracerdef spam(a, b, c):      print(a + b + c)  
spam(1,2,3)spam(1,2,3)

 

 

posted @ 2017-03-22 15:55  sysnap  阅读(3309)  评论(0编辑  收藏  举报