双层装饰器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双层装饰器相关的知识,希望对你有一定的参考价值。

user_info={}       首先定义一个空字典,作为后面的判断依据

def check_login(func):              装饰器1:用来检查用户是否登录,通过字典user_info里面is_login的键值,当键值存在的时候即(None)表示用户已登录

  def inner(*args,**kwargs):

    if user_info.get("user_login",None):

      ret=func(*args,**kwargs)

      return ret

    else:

      print("请登录")

  return inner

def check_manager(func):            装饰器2:用来检查用户权限,通过user_type键值判断,当键值存在并且为2的时候说明用户具有权限

  def inner(*args,**kwargs):

    if user_info.get("user_login",None)==2:

      ret=func(*args,**kwargs)

      return ret

    else:

      print("权限不够")

  return inner

 

@check_login()                  函数一:被一个装饰器@check_login装饰,当用户登录后即可调用函数home()

def home():

  print("普通用户")

 

@check_login                  函数二:被两个装饰器装饰,当用户登录后,并且具有权限才能调用函数manager()

@check_manager                注意:这里两个装饰器分先后,先检查是否登录,然后检查是否具有权限。

def manager():

  print("管理用户")

 

def login(*args,**kwrags):

  user=input("用户名:")

  pwd=input("密码:")

  if user=="administrator":

    user_info[is_login]=True

    user_info[user_type]=2

  else:

    user_info[is_login]=True

def main():

  choice=input("1 登录,2 查看信息,3 管理")

  if choice=1:

    login()

  elif choice=2:

    home()

  elif choice=3:

    manager()

 

调用主函数:

main()

 

 

实现结果:

未登录前是不能 2 查看信息  3管理

其它用户登录后只能查看“普通用户”

当用administrator登录后,才能查看“管理用户”

 

 

 

 

 

 

 

 

 

 

 

 

 

    

以上是关于双层装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Day5 双层装饰器字符串格式化

python- 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

关于闭包即双层装饰器的理解

python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

模块调用,datetime,time,logging,递归,双层装饰器, json,pickle迭代器和生成器

Python之模块