码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器

时间:2016-11-12 23:10:31      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:ret   pre   开放   实现   例子   put   赋值   参数   lob   

一句话说清

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

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

例子

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

  

装饰器

标签:ret   pre   开放   实现   例子   put   赋值   参数   lob   

原文地址:http://www.cnblogs.com/fengdao/p/6057544.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!