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常用的装饰器】待后续补充。。。
推荐阅读
- 昨夜小楼听风
- 为什么你的路演总会超时()
- 深入理解Go之generate
- 遗憾是生活的常态,但孝顺这件事,我希望每一个人都不留遗憾
- python学习之|python学习之 实现QQ自动发送消息
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- 唱歌教学(导致嗓音损坏的几个常见的错误唱歌方法!)