Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么下面的代码会给出错误-“;错误:';非类型';对象不可调用";_Python_Python Decorators - Fatal编程技术网

Python 为什么下面的代码会给出错误-“;错误:';非类型';对象不可调用";

Python 为什么下面的代码会给出错误-“;错误:';非类型';对象不可调用";,python,python-decorators,Python,Python Decorators,这是一个用于创建装饰器的python程序 今天我第一次使用stackoverflow…所以我上传这个问题时遇到了问题 #代码- def维护(项目1): def greet(): 打印(“早上好”) 项目1() 印刷品(“坦桑尼亚语”) 回敬 #装饰师---- @维护 def hello(): 打印(“你好”) #hello=maint(你好) 你好() 这是一个用于创建装饰器的python程序 return greet() 在装饰器中,调用greet()并返回其结果。由于greet()没有显

这是一个用于创建装饰器的python程序 今天我第一次使用stackoverflow…所以我上传这个问题时遇到了问题

#代码-
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如果您觉得有帮助,请单击我的答案旁边的复选标记接受它。