def sync(func):
   def wrap(*args,**kv):

       self=args[0]
       self.lock.acquire()
       print 'in wrap'
       print args
       print kv
       try:
           return func(*args,**kv)
       finally:
           self.lock.release()
   return wrap
import threading
class C(object):
   def __init__(self):
       self.lock=threading.Lock()
   @sync
   def aaa(self,m,m2):
       print 'm is',m
       print 'm2 is',m2
   @sync
   def bbb(self,n='nnn'):
       print 'n is',n

ccc=C()
ccc.aaa('yes',m2='yes2')
print '########################'
ccc.bbb(n='no')

###############################################

func的参数会直接传给wrap函数, 装饰器函数里面就是要定义一个函数(被返回),注意return func是用到了“闭包”的特性。