Python 在语言级别提供了装饰器模式的实现,代码中Python内置的 functools.wraps 会完成包括函数名属性处理替换

#!/usr/bin/env python3
#--coding:utf-8--

import functools

def log1(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        print('log1 message')
        return func(*args, **kw)
    return wrapper

@log1
def fn1():
    print('fn1 working...')

fn1()

def log2(text):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('log2 message: {0}'.format(text))
            return func(*args, **kw)
        return wrapper
    return decorator

@log2('python3') # 此处和 log2 定义对应,传入 text 参数
def fn2():
    print('fn2 working...')

fn2()

 

posted on 2017-07-28 16:25  啊哈咧  阅读(125)  评论(0编辑  收藏  举报