1. class logging(object): def __init__(self,level='INFO'): self.level=level def __call__(self,func): def wrapper(*args,**kwargs): print "[{level}]:enter {func}()".format(level=self.level,func=func.__name__) func(*args,**kwargs) return wrapper @logging(level='INFO') def say2(something): print "hello {}".format(something) if __name__=='__main__': say2('nihao') [INFO]:enter say2() hello nihao 2. #相当于调用classmethod/staticmethod的__init__方法 class classmethod(object): def __init__(self, function): pass class staticmethod(object): def __init__(self, function): pass class Test1(object): def test1(self): print 'object' @classmethod def test2(cls): print 'classmethod' @staticmethod def test3(): print 'staticmethod' a=Test1() a.test1() print a.test2 print a.test3
object
<__main__.classmethod object at 0x000000000254D588>
<__main__.staticmethod object at 0x000000000254D5C0>