Python系列:装饰器decorator

1. 什么是装饰器

在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。

本质上,decorator就是一个返回函数的高阶函数。所以,我们要定义一个能打印日志的decorator,可以定义如下:

观察上面的log,因为它是一个decorator,所以接受一个函数作为参数,并返回一个函数。我们要借助Python的@语法,把decorator置于函数的定义处:

调用now()函数,不仅会运行now()函数本身,还会在运行now()函数前打印一行日志:

经过decorator装饰之后的函数,它们的__name__已经从原来的'now'变成了'wrapper'。需要把原始函数的__name__等属性复制到wrapper()函数中,否则,有些依赖函数签名的代码执行就会出错。不需要编写wrapper.__name__ = func.__name__样的代码,Python内置functools.wraps就是干这个事的,所以,一个完整的decorator的写法如下:

 

2. python内置装饰器

 

2.1 @property

把类的一个方法变成属性调用。把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值。

 

2.2 @staticmethod和@classmethod

The Static methods are used to do some utility tasks, and class methods are used for factory methods. The factory methods can return class objects for different use cases (不同参数的构造函数).

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值