Python 为什么下面的代码会给出错误-“;错误:';非类型';对象不可调用";
这是一个用于创建装饰器的python程序 今天我第一次使用stackoverflow…所以我上传这个问题时遇到了问题Python 为什么下面的代码会给出错误-“;错误:';非类型';对象不可调用";,python,python-decorators,Python,Python Decorators,这是一个用于创建装饰器的python程序 今天我第一次使用stackoverflow…所以我上传这个问题时遇到了问题 #代码- def维护(项目1): def greet(): 打印(“早上好”) 项目1() 印刷品(“坦桑尼亚语”) 回敬 #装饰师---- @维护 def hello(): 打印(“你好”) #hello=maint(你好) 你好() 这是一个用于创建装饰器的python程序 return greet() 在装饰器中,调用greet()并返回其结果。由于greet()没有显
#代码-
def维护(项目1):
def greet():
打印(“早上好”)
项目1()
印刷品(“坦桑尼亚语”)
回敬
#装饰师----
@维护
def hello():
打印(“你好”)
#hello=maint(你好)
你好()
这是一个用于创建装饰器的python程序
return greet()
在装饰器中,调用greet()
并返回其结果。由于greet()
没有显式返回,因此结果是None
。这将有助于认识到decorator是以下内容的简写语法:
def hello():
pass
hello = maint(hello)
注意hello是如何被重新分配给maint()
返回的内容的。在您的情况下,hello
被重新分配给None
。因此调用hello()
会导致错误
要解决这个问题,只需返回不带括号的问候语。装饰器总是返回一个函数。他们不应该调用该函数。哪一行导致错误?
return greet()
应该是return greet
?否则,在您注释掉的示例中(对于装饰者也是如此)hello=maint(hello)
,maint
将返回greet
的输出,该输出为None
,因此您将函数hello
替换为None
,该函数不是函数。谢谢您的帮助!)@Tanisharmah如果您觉得有帮助,请单击我的答案旁边的复选标记接受它。