TimeWrangler 2023-12-24 22:17 采纳率: 100%
浏览 2
已结题

装饰器的问题:为什么调用不加括号,还只能用静态方法?

装饰器的问题:为什么调用不加括号,还只能用静态方法?


def login(func):
    def inner():
        name=input("用户名:")
        pw=input("密码:")
        if name=="Skyyy"and pw=="sb":
            func()
        else:
            print("gun!!!")
    return inner()

class Person:
    @login
    @staticmethod
    def f2():
        print("\(@^0^@)/")

Person.f2
print("*"*10)
Person.f2()

运行结果:

D:\Skyyy\venv\Scripts\python.exe D:/Skyyy/Warmup/Let's_start.py
用户名:Skyyy
密码:sb
\(@^0^@)/
**********
Traceback (most recent call last):
  File "D:\Skyyy\Warmup\Let's_start.py", line 2119, in <module>
    Person.f2()
TypeError: 'NoneType' object is not callable

进程已结束,退出代码1

  • 写回答

3条回答 默认 最新

  • micthis 2023-12-24 22:49
    关注

    login应该返回inner而不是返回调用inner后的结果。

    def login(func):
        def inner():
            name=input("用户名:")
            pw=input("密码:")
            if name=="Skyyy"and pw=="sb":
                func()
            else:
                print("gun!!!")
        return inner
        #return inner()
    class Person:
        @login
        @staticmethod
        def f2():
            print("\(@^0^@)/")
    #Person.f2
    print("*"*10)
    Person.f2()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月1日
  • 已采纳回答 12月24日
  • 创建了问题 12月24日