【问题标题】:Python - give wrapper function the same name as wrapped functionPython - 为包装函数提供与包装函数相同的名称
【发布时间】:2018-10-12 12:12:14
【问题描述】:

是否可以修改装饰器功能

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!

?我的目标是编写几个都依赖函数名的装饰器。

【问题讨论】:

  • functools.update_wrapper?功能工具
  • functools.wraps?
  • 谢谢,这行得通!您要发布答案吗?如果没有,我将编辑问题以包含您的解决方案。
  • @Rastapopoulus 目前无能为力。我在机场,即将登机

标签: python-3.x python-decorators


【解决方案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()

【讨论】:

    猜你喜欢
    • 2021-08-20
    • 2021-10-05
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2020-06-15
    • 2014-05-01
    • 1970-01-01
    相关资源
    最近更新 更多