怎么用装饰器实现如下功能?

怎么用装饰器实现如下功能?如何在装饰函数里判断被装饰函数里的登录状态是否实现了?

img

方法很多种,我只是提供参考
代码实现如下


def loginchack(func):
    def _loginchack(request, *args, **kwargs):
        global loginmark
        if loginmark:
            return func(request, *args, **kwargs)
        else:
            print('请先登录')
            if login():
                loginmark=True
                return func(request, *args, **kwargs)
            else:
                print('登陆失败')
                return None

    return _loginchack


def menu():
    print('1.增加物品')
    print('2.删除物品')
    try:
        innumber = int(input('请输入你的选择:'))
    except:
        innumber = 0
    return innumber

@loginchack
def operation(innumber):
    if innumber == 1:
        print('成功添加一件物品')
    elif innumber == 2:
        print('成功删除一件物品')
    else:
        print('请输入正确的数字')


def login():
    name = input('请输入用户名')
    password = input('请输入密码')
    if password == '123' and name == 'admin':
        return True
    else:
        return False


loginmark = False
if __name__ == '__main__':
    while True:
        innumber = menu()
        operation(innumber)

img


有帮助请采纳,有问题继续交流,你的采纳是对我回答的最大的肯定和动力

首先add本来就不是一个装饰函数,装饰函数有固定格式,第二,长度部位0还是有登录输入语句,你检查一下第六行你的登录逻辑,你没有做判断就直接执行了登录语句,你这里的@add是没有用的