2017-06-04 67 views
-2

我有问题,与下面的练习: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 

我被困在这一点,无法找出出了什么问题,任何帮助表示赞赏!

+0

使用'returns wrapped_item'。目前,你在返回*之前调用了函数,这会导致'new_gpu'被分配给'wrapped_item()'的结果,这是'str'的​​结果。 –

+0

为什么你想写的代码与你写的代码不同? – martineau

+0

代码是不同的,因为我不想重写他的代码,但创建了我自己的代码,但在给定的练习中 – econ

回答

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

,但它会工作,如果你在new_gpu函数返回str说法。