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()
  • 相关阅读:
    link标签中的integrity和crossorigin字段
    jquery中的插件EChars的使用
    php函数 截断字符
    子元素脱离文档标准流,父元素没有高度解决办法
    有序无序Ul->Li Ol->Li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单(变形2 ---修饰)
    有序无序ul->li ol->li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单
    bootstrap使用总结(carousel设置大小。item设置大小,img设置大小)
    bootstrap使用总结(导航在carousel居中之上)
    html中设置height=100%无效的问题
    第四次上机课
  • 原文地址:https://www.cnblogs.com/fantsaymwq/p/9597114.html
Copyright © 2011-2022 走看看