python常用的装饰器

Python中有很多装饰器(decorator),可以减少冗余代码。Decorator本质上也是函数,只是它的参数也是函数。这里记录一下常用的decorator,方便以后查找。

  • staticmethod
    用来修饰类中的方法,使得该方法可以直接用类名访问,如cls.foo()。
  • classmethod
    和staticmehod类似,区别在于staticmethod,classmethod会将class传入被修饰的方法中。
class A(object): a = 1 def __init__(self): self.a = 2@staticmethod def foo1(): print A.a@classmethod def foo2(cls): print "class a is", cls.a print "instance a is", cls().aA.foo1() A.foo2()

  • property
    可以将属性的访问和赋值用函数来实现,从而可以在函数里添加参数检查等一些功能,同时外部使用时访问和赋值的方式并不发生变化。注意访问和赋值的方法名是一样的。
class A(object): def __init__(self): self.__count = 0@property def count(self): return self.__count@count.setter def count(self, value): if not isinstance(value, int): raise ValueError('count must be an integer!') self.__count = valuea = A() print a.count a.count = 1 print a.count a.count = "a" # raise ValueError

  • functools.wraps
    用在装饰器的代码里。可以把原始函数的__name__等属性复制到wrapper()函数中,这样就可以获取到真实函数的__name__属性,而不是wrapper。
import functoolsdef log(text): def decorator(func): @functools.wraps(func) def wrapper(*args, **kw): print '%s %s():' % (text, func.__name__) return func(*args, **kw) return wrapper return decorator

【python常用的装饰器】待后续补充。。。

    推荐阅读