我試圖在 python 中實(shí)現(xiàn)裝飾器,但在第 14 行出現(xiàn)錯(cuò)誤,即 hello() #The code- def maint(item1): def greet(): print("Good Morning") item1() print("Tanish") return greet() #decorator---- @maint def hello(): print("Hello") # hello=maint(hello) hello()我究竟做錯(cuò)了什么?
1 回答

偶然的你
TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
return greet()
在裝飾器中,您調(diào)用greet()
并返回其結(jié)果。由于greet()
沒(méi)有顯式返回,因此結(jié)果為None
。這將有助于認(rèn)識(shí)到裝飾器是這樣的簡(jiǎn)寫語(yǔ)法:
def hello(): passhello = maint(hello)
注意 hello 是如何被重新分配給任何maint()
返回值的。在您的情況下,hello
被重新分配給None
. 所以調(diào)用hello()
會(huì)導(dǎo)致錯(cuò)誤。
要解決此問(wèn)題,只需return greet
不帶括號(hào)即可。裝飾器總是返回一個(gè)函數(shù)。他們不應(yīng)該調(diào)用該函數(shù)。
添加回答
舉報(bào)
0/150
提交
取消