zoukankan      html  css  js  c++  java
  • 3.29 装饰器

    装饰器

    开放封闭原则

    软件一旦上线后就该遵循开放封闭原则,对修改源代码是封闭的,对功能的扩展是开放的,也就是说我们必须找到一种解决方案

    能够在不修改一个功能源代码以及调用方式的前提下,为其加上新功能

    总结

        原则如下:1.不修改源代码

                  2.不修改调用方式

             目的

                  在遵守1和2原则的基础上扩展新功能

    器指的工具 装饰器指的是为被装饰器对象添加新功能

    装饰器即不在不修改被装饰对象源代码与调用方式的前提下,为被装饰器对象添加新功能

    装饰器与被装饰的对象均可以是任意可调用对象

    装饰器☞函数

    装饰器对象☞函数

    装饰器基本模块

    def ourtter(fuck)

          def inner(*args,**kwargs)

              res=fuck(*args,**kwargs)

              return res    

          return inner

    f=ourtter()

    f()

    无参函数

    import time
    a_path='a.txt'
    def outter(fuck):
    def supper(*args, **kwargs):
    name = input('用户名>>:').strip()
    pwd = input('密码>>:').strip()
    with open(r'%s' % a_path, 'r')as f:
    for line in f:
    if name and pwd in line:
    print('登陆成功')
    res = fuck(*args, **kwargs)
    else:
    print('用户或密码错误')
    return supper

    @outter
    def index():
    time.sleep(3)
    print('我是神经病!!!')
    return 123
    index()
    有参函数
    import time
    current_user={
    'username':None,
    # 'login_time':None
    }

    def auth(engine):
    # engine='file'
    def auth2(func):
    # func=index
    def wrapper(*args,**kwargs):
    if engine == 'file':
    if current_user['username']:
    print('已经登陆过了')
    res=func(*args,**kwargs)
    return res

    uname=input('用户名>>: ').strip()
    pwd=input('密码>>: ').strip()
    if uname == 'egon' and pwd == '123':
    print('登陆成功')
    current_user['username']=uname
    res=func(*args,**kwargs)
    return res
    else:
    print('用户名或密码错误')
    elif engine == 'mysql':
    print('基于MyQL的认证')
    elif engine == 'ldap':
    print('基于LDAP的认证')
    return wrapper
    return auth2

    @auth('ldap') #@auth2 #index=auth2(index) #index=wrapper
    def index():
    time.sleep(1)
    print('welcome to index page')
    return 122


  • 相关阅读:
    WUST Online Judge
    WUST Online Judge
    WUST Online Judge
    WUST Online Judge
    写在前面
    一丶Python简介
    七丶Python字典
    六丶Python列表操作
    五丶Python列表丶元组丶字典
    四丶Python运算符
  • 原文地址:https://www.cnblogs.com/yftzw/p/8670018.html
Copyright © 2011-2022 走看看