python 中的装饰器

来源:互联网 发布:河北省网络志愿者联盟 编辑:程序博客网 时间:2024/05/22 11:49

由于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,其将帮助输出loglog_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 innerclass 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 参数: Tomhello Tom调用方法结束

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

原创粉丝点击