【问题标题】:Stacking decorators in Python在 Python 中堆叠装饰器
【发布时间】:2013-07-01 18:27:04
【问题描述】:

所以...

这行得通

def makeBold(fn):
    def wrapped():
        return '<b>'+fn()+'</b>'
    return wrapped
@makeBold
def sayhello():
    return 'Ey yo wassup'

并产生预期的Ey yo wassup

但是,这不起作用

def makeBold(fn):
    def wrapped():
        return '<b>'+fn()+'</b>'
    return wrapped

def makeItalic(fn):
    def wrapped():
        return '<i>'+fn()+'</i>'

@makeItalic
@makeBold
def sayhello():
    return 'Ey yo wassup'

所有这些都会产生这个不错的 NoneType 错误...

我认为它会产生类似 Ey yo wassup

想法?

【问题讨论】:

  • 你忘记从makeItalic返回wrapped
  • 如果标签顺序对你来说很重要,装饰器会从内到外应用,所以上面会返回&lt;i&gt;&lt;b&gt;Ey yo wassup&lt;/b&gt;&lt;/i&gt;
  • 好消息,我在修复后注意到了这一点。谢谢帕维尔!

标签: python decorator


【解决方案1】:
def makeBold(fn):
    def wrapped():
        return '<b>'+fn()+'</b>'
    return wrapped

def makeItalic(fn):
    def wrapped():
        return '<i>'+fn()+'</i>'
    return wrapped

@makeItalic
@makeBold
def sayhello():
    return 'Ey yo wassup'

【讨论】:

    猜你喜欢
    • 2014-12-16
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2013-08-07
    • 2014-01-23
    • 2017-08-20
    相关资源
    最近更新 更多