декорирование декораторов: попытайтесь понять это

Я пытаюсь понять, как декорировать декораторы, и хотел попробовать следующее:

Допустим, у меня есть два декоратора и я применяю их к функции привет:

def wrap(f):
    def wrapper():
        return " ".join(f())
    return wrapper


def upper(f):
    def uppercase(*args, **kargs):
        a,b = f(*args, **kargs)
        return a.upper(), b.upper()
    return uppercase

@wrap
@upper
def hello():
    return "hello","world"

print hello()

Тогда я должен начать добавлять другие d экораторы для других функций, но в целом декоратор обертывания "обернет их все"

def lower(f):
    def lowercase(*args, **kargs):
        a,b = f(*args, **kargs)
        return a.lower(), b.lower()
    return lowercase

@wrap
@lower
def byebye():
    return "bye", "bye"

Теперь, как мне написать декоратор, с помощью которого я могу украсить свои нижний и верхний декораторы:

@wrap
def lower():
    ...

@wrap
def upper():
    ...

Для достижения тот же результат, что и выше, только выполнив:

@upper
def hello():
    ...

@lower
def byebye():
    ...
21
задан Moshe Katz 11 December 2013 в 16:31
поделиться