欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

装饰器 TypeError: 'NoneType' object is not callable

程序员文章站 2024-02-12 17:19:04
...
def simple_decorator(f):
    print('in in in')
    f()
    print('out out out')

@simple_decorator
def test():
    print('this just a test')

test()

会报错,解决方案:最后的test()改为test即可,因为simple_decorator没有return。

当()被附加在方法或者类后面时,表示调用,当对象不具备调用性的时候,就会报错:‘某个类型’ object is not callable。
当一个方法被调用后,是否能被再次执行,取决于它是否会return一个对象,并且该对象可以被调用。
@simple_decorator装饰test,可理解为test = simple_decorator(test),执行test(),首先,执行simple_decorator(test),由于simple_decorator没有返回值,此时test()等价于none(),所以simple_decorator(test)()没有对象可以调用,就会报错TypeError: ‘NoneType’ object is not callable。

因此,解决方案也可以是:
1.simple_decorator最后加上return f,此时执行结果为:

in in in
this just a test
out out out

print(test,test())会得到:<function test at 0x0000016A3966D670>,
this just a test, None
2.最后加上return f (),此时test运行后结果为,相当于用装饰器装饰test后再次单独调用test:

in in in
this just a test
out out out
this just a test

print(test)会得到:none
而test()会报错:TypeError: ‘NoneType’ object is not callable
此时,若在test函数内加return 1,则print(test)则会得到1

上一篇: 路由器 telnet配置

下一篇: