• 装饰器


    装饰器

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

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

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

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

    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()
  • 相关阅读:
    BZOJ 2142: 礼物
    八校联考前3场记录
    BZOJ1115:[POI2009]石子游戏Kam (博弈论)
    IE10、IE11解决不能播放Flash的问题!
    ClientAbortException 异常解决办法
    WeX5学习笔记-建立项目且从SVN获取版本
    WeX5学习笔记-创建本地APP相关问题
    android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )屏幕适配
    ERROR 1130 (HY000):Host'localhost'解决方法
    一台机器运行多个JBoss 4.2.3多实例,或多个同一版
  • 原文地址:https://www.cnblogs.com/fantsaymwq/p/9597114.html
Copyright © 2020-2023  润新知