裝飾器

裝飾器

在符合軟件開發的原則上,給代碼加一些功能。python

軟件開發中的一個原則「開放-封閉」原則,簡單來講,它規定已經實現的功能代碼不容許被修改,但能夠被擴展,即:後端

  • 封閉:已實現的功能代碼塊不該該被修改
  • 開放:對現有功能的擴展開放

原程序(假設是一個視頻網站的後端開發工程師)網站

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()

要容許用戶選擇用qq\weibo\weixin認證blog

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()
相關文章
相關標籤/搜索