python --装饰器练习(先判断是否能登录再判断是否为root用户)

题目:
先判断是否能登录,在判断是否为root用户



方法1:
import functools
import inspect

def is_root(fun):
    @functools.wraps(fun)
    def wrapper(*args,**kwargs):
        #inspect.getcallargs返回值是字典,key值为:形参,value值为:形参对应实参
        inspect_res = inspect.getcallargs(fun,*args,**kwargs)
        print('inspect_res的返回值为:%s' %inspect_res)
        if inspect_res.get('name') == 'root':
            res = fun(*args,**kwargs)
            return res
        else:
            print('not root user')
    return wrapper

login_list = ['root','admin','redhat']

def is_login(fun):
    @functools.wraps(fun)
    def wrapper(*args,**kwargs):
        if args[0] in login_list:
            res = fun(*args,**kwargs)
            return res
        else:
            print('Error:%s未登录' %args[0])
    return wrapper

@is_login
@is_root
def add_student(name):
    print('添加学生信息...')

add_student('root')


方法2:
def denglu(fun):
    def wrapper(*args, **kwargs):
        if args[0] != '':
            print('登录成功')
            fun(*args, **kwargs)
        else:
            print('no user')
    return wrapper


def panduan(fun):
    def wrapper(*args, **kwargs):
        if 'root' in args:
            fun(*args, **kwargs)
        else:
            print('error')

    return wrapper


@denglu
@panduan
def add_student(name):
    print('添加学生信息.....')
add_student('root')

猜你喜欢

转载自blog.csdn.net/yinzhen_boke_0321/article/details/86600669