Python - присвоить функции-оболочке то же имя, что и функции-оболочке - PullRequest
0 голосов
/ 02 мая 2018

Можно ли изменить функцию декоратора

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 голосов
/ 03 мая 2018

Следующий код должен работать, хотя я не совсем уверен в ваших намерениях.

В любом случае, доверяя своим внутренностям, я бы отказался от таких конструкций.

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