2017-06-04 71 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說法。