zoukankan      html  css  js  c++  java
  • 装饰器

    装饰器

    在符合软件开发的原则上,给代码加一些功能。

    软件开发中的一个原则“开放-封闭”原则,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即:

    • 封闭:已实现的功能代码块不应该被修改
    • 开放:对现有功能的扩展开放

    原程序(假设是一个视频网站的后端开发工程师)

    def home():
        print("---首页----")
       
    def vip():
        print("----vip专区----")
    
    def moive():
        print("----电影专区----")
    
    def TV():
        print("----电视剧----")  

    现想对几个板块内容进行收费,只有vip才能观看相应区域

    flag = False
    def login(func):
        def inner():
            username = "alex"
            password = "123"
            global flag
            if flag == False:
                name = input("username:")
                pw = input("password;")
                if name == username and pw == password:
                    print("welcome %s....."%name)
                    flag = True
                else:
                    print("Wrong username or password")
            else:
                print("User is logged in")
            if flag:
                func()
        return inner
    
    
    def home():
        print("---首页----")
    @vip    # 等同于 vip = login(vip)
    def vip():
        print("----vip专区----")
    
    def moive():
        print("----电影专区----")
    
    def TV():
        print("----电视剧----")
    
    vip()  #inner

    带参数装饰器

    flag = False
    def login(func):
        def inner(*args,**kwargs):
            username = "alex"
            password = "123"
            global flag
            if flag == False:
                name = input("username:")
                pw = input("password;")
                if name == username and pw == password:
                    print("welcome %s....."%name)
                    flag = True
                else:
                    print("Wrong username or password")
            else:
                print("User is logged in")
            if flag:
                func(*args,**kwargs)
        return inner
    
    
    def home():
        print("---首页----")
    
    @login
    def vip(style):
        print("----vip专区----",style)
    
    def moive():
        print("----电影专区----")
    
    def TV():
        print("----电视剧----")
    
    vip("music")
    TV()

    要允许用户选择用qqweiboweixin认证

    flag = False
    def login(auth_type):
        def outer(func):
            def inner(*args,**kwargs):
                username = "alex"
                password = "123"
                global flag
                if flag == False:
                    name = input("username:")
                    pw = input("password;")
                    if name == username and pw == password:
                        print("welcome %s....."%name)
                        flag = True
                    else:
                        print("Wrong username or password")
                else:
                    print("User is logged in")
                if flag:
                    func(*args,**kwargs)
            return inner
        return outer
    
    
    def home():
        print("---首页----")
    
    @login('wx')
    def vip(style):
        print("----vip专区----",style)
    
    def moive():
        print("----电影专区----")
    
    @login('qq')
    def TV():
        print("----电视剧----")
    
    vip("music")
    TV()
  • 相关阅读:
    Ajax的技术与原理探讨
    Ajax技术与原理
    AJAX原理
    vue中ref的一些常见作用
    表的连接查询
    mysql使其支持插入中文数据的办法
    16 散列表-基于除余留数法与线性探测法的实现
    win10上Tensorflow的安装教程
    哨兵/sentinel:在算法设计中的应用
    快速选择算法/Select 寻找第k大的数
  • 原文地址:https://www.cnblogs.com/fantsaymwq/p/9597114.html
Copyright © 2011-2022 走看看