Python - 给包装函数提供与包装函数相同的名称

时间:2018-05-02 11:33:59

标签: python-3.x python-decorators

是否可以修改装饰器功能

def wrap(function):
    def wrapper(*args, **kwargs):
        print(function.__name__)
        return function(*args, **kwargs)
    return wrapper

制作代码

@wrap
@wrap
@wrap
def hello():
    print("Hello, world!")


hello()

打印

hello
hello
hello
Hello, world!

而不是

wrapper
wrapper
hello
Hello, world!

?我的目标是组成几个依赖于函数名的装饰器。

1 个答案:

答案 0 :(得分:1)

以下代码应该可以使用,但我不太确定你的意图。

无论如何,相信我的胆量,我会避开这样的结构。

import functools

def wrap(function):
    @functools.wraps(function)
    def wrapper(*args, **kwargs):
        print(function.__name__)
        return function(*args, **kwargs)
    return wrapper

@wrap
@wrap
@wrap
def hello():
    print("Hello, world!")

hello()