功能包装练习(装饰器)

时间:2017-06-04 13:54:01

标签: python python-3.x python-decorators

我对以下练习有疑问:https://pythonprogramming.net/decorators-intermediate-python-tutorial/ 这是我想写的代码:

def add_wrapping(item):
    def wrapped_item():
        return 'a wrapped up box of {}'.format(str(item()))
    return wrapped_item

@add_wrapping
def new_gpu():
    return 'a new Tesla P100 GPU!'
print(new_gpu())

这是我的代码:

def add_wrapping(item):
    def wrapped_item():
        return "a wrapped up box of {}".format(str(item()))
    return wrapped_item()
@add_wrapping
def new_gpu():
    return "new car!"
print(new_gpu())

我在PyCharm工作,这是错误,它给了我:

line 17, in <module>
    print(new_gpu())
TypeError: 'str' object is not callable

我在这一点上陷入困​​境,无法弄清楚出了什么问题,感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

首先,您需要返回wrapped_item个对象,而不是返回wrapped_item()

例如,您可以在装饰器内调用func参数。

def add_wrapping(func):
    def wrapped_item():
        return "a wrapped up box of " + func()
    return wrapped_item

@add_wrapping
def new_gpu():
    return "new car!"
print(new_gpu())

但如果您在str函数中返回new_gpu参数,它将会起作用。