Почему декораторы Python не могут быть связаны между собой определениями?

Почему арнт следующие два сценария эквивалентны?

(Взято из другого вопроса:Понимание Python Decorators)

def makebold(fn):
    def wrapped():
        return "" + fn() + ""
    return wrapped

def makeitalic(fn):
    def wrapped():
        return "" + fn() + ""
    return wrapped

@makebold
@makeitalic
def hello():
    return "hello world"

print hello() ## returns hello world

и с декорированным декоратором:

def makebold(fn):
    def wrapped():
        return "" + fn() + ""
    return wrapped

@makebold
def makeitalic(fn):
    def wrapped():
        return "" + fn() + ""
    return wrapped

@makeitalic
def hello():
    return "hello world"

print hello() ## TypeError: wrapped() takes no arguments (1 given)

Почему я хочу знать? Я'мы написалиretry декоратор для перехвата исключений MySQLdb - если исключение временное (например, тайм-аут), оно будет повторно вызывать функцию после небольшого сна.

мы также получилиmodifies_db декоратор, который заботится о некотором домашнем хозяйстве, связанном с кэшем.modifies_db украшенretry, поэтому я предположил, что все функции украшеныmodifies_db также повторил бы неявно. Где я неправ?

Ответы на вопрос(3)

Ваш ответ на вопрос