1 Adorner no parameters
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 (a)
2 Adorner with parameters
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 (a)
Spam (a)
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 (spam)
Python class Decorator