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().a


A.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 = value


a = A()
print a.count
a.count = 1
print a.count
a.count = "a" # raise ValueError
  • functools.wraps
    用在装饰器的代码里。可以把原始函数的__name__等属性复制到wrapper()函数中,这样就可以获取到真实函数的__name__属性,而不是wrapper。
import functools

def 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

待后续补充。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.列表解析式和字典解析式 列表解析式语法 [expr for value in collection if...
    MononokeHime阅读 1,969评论 0 8
  • 一、史前故事 先看一个简单例子,实际可能会复杂很多: 现在有一个新的需求,希望可以记录下函数的执行日志,于是在代码...
    DevinZhang阅读 845评论 4 22
  • 找到我的电脑,右键打开属性,打开高级系统设置,打开环境变量。 注意:添加java环境变量是添加下面的系统变量。最后...
    少女萌的进击之路阅读 123评论 0 0
  • 20180309亲爱的自己,今天给自己个不写心赏的理由是自己太忙了,想偷懒了。其实是晚上兼职回来的确有些晚了,因此...
    简单的幸福_ceb3阅读 153评论 0 4
  • 这毕竟是七月!窗外可还下着雨,一直下着…… 放假也近一个月了!说什么毕业季好好告别,最后却是太多‘“再见”未曾说...
    三明治上帝阅读 258评论 0 0