首页 > 代码库 > 装饰器

装饰器

一句话说清

不改变原有功能代码,不改变原有调用方式,实现调用

第二句话——符合 开放-封闭原则

例子

user_status = False

def login(func):        #定义,并不执行
    def inner(*args,**kwargs):      #用于传递 func参数
        _username = "alex"
        _password = "abc123"
        global user_status

        if user_status == False:
            username = input("user:")
            password = input("password:")
            if username == _username and password == _password:
                password("welcome login...")
                user_status = True
            else:
                print("wrong username or password")

        if user_status == True:
            func(*args,**kwargs)        #将参数传递给func
    return inner        #返回inner内存地址,里面包括了func的执行结果和inner的执行结果

def home():
    print("--------首页-------")
@login          #相当于定义America=login(America),装饰器是把原来的函数的内存地址,当成参数传进去,返回的新内存地址,再赋值给原来函数的变量名
def America():
    print("--------欧美专区-------")
@login
def japan():
    print("--------日韩专区-------")
@login
def henan():
    print("--------河南专区-------")

home()
America()

  

装饰器