Python - 为包装函数指定与包装函数相同的名称

Python - give wrapper function the same name as wrapped function

是否可以修改装饰器功能

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!

?我的目标是组合几个装饰器,它们都依赖于函数名。

尽管我不太确定您的意图,但以下代码应该可以工作。

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

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()