python 中的装饰器

由于python的方法为其第一类对象,顾在python中可以很便捷的将方法作为对象进行赋值及传输,而所谓装饰器的实质为:将被调用的方法交付于装饰器控制和管理,装饰器对于方法对象的运行调度具备绝对的控制,这非常适用于logger、方法的权限控制等场景,学过Java等语言的动态代理的同学应该能很容易的接受。接下来我们来通过两个例子来深刻理解,并熟练掌握python装饰器这一出色的特性;

手写装饰器


def say_hello(friend):
    print('Hello',friend)

# 手写装饰器
def log_decorator(fun, *args):
    print('调用方法 %s 前' % (fun.__name__))
    r = fun(args)
    print('调用方法 %s 结束' % (fun.__name__))
    return r

# 将say_hello方法对象 及其参数传递于log_decorator,其将帮助输出log
log_decorator(say_hello, 'Tom')

输出结果

调用方法 say_hello 前
Hello ('Tom',)
调用方法 say_hello 结束

基于python支持的装饰器

# 装饰器
def logger(func):
     # 生成一个负责控制方法的内部方法 并返回该方法对象
     def inner(self,friend):
         print ("调用方法 %s 参数: %s" % (func.__name__,friend))
         r = func(self,friend) #2
         print("调用方法结束")
         return r
     return inner

class person:
    def __init__(self,name):
        self.name = name
    @logger  # 通过@+装饰器名称 将方法与装饰器绑定
    def say_hello(self,friend):
        print('hello',friend)

p = person('Buynow')
p.say_hello('Tom')

输出结果

调用方法 say_hello 参数: Tom
hello Tom
调用方法结束

可以看到python支持的装饰器特性,很好的帮助第二列进行log,只需在方法上加上 @logger ;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值