zoukankan      html  css  js  c++  java
  • 装饰器 泽桐

    这里以写一个auth认证功能装饰器为例,理解装饰器实现原理:

    因为装饰器是一个函数,定义一个auth函数

    def auth(func):
        def inner(*args, **kwargs):
            username = input('username:').strip() 
            password = input('password:').strip() 
            if username == 'admin' and password == 'admin':
                print('Authentication sucess!')
                func(*args, **kwargs)
            else:
                print('Authentication failed!')
        return inner
    
    @auth  # demo = auth(demo)  --> demo = inner
    def demo(n):  # 被装饰的函数demo
        print('function demo %s is running..'%n)
    
    demo(1)  # 相当于inner(1)

    以上,实现了无参数的装饰器

    有参装饰器:

    def auth(auth_type, *args, **kwargs):  # 三层就够了,因为所有参数都可以在最外层传进来
    def
    auth2(func): def inner(*args, **kwargs): username = input('username:').strip() password = input('password:').strip()
    if auth_type == 'file': # 以下应该是从文件读取出用户数据
    if username == 'admin' and password == 'admin': print('Authentication sucess!') func(*args, **kwargs) else: print('Authentication failed!')
    else: # 可以拓展mysql/oracle等不同类型数据库的读取数据方法
    print('auth_type invalid!')
    return inner
    return auth2 @auth(auth_type='file')
    # demo = auth2(demo) --> demo = inner def demo(n): # 被装饰的函数demo print('function demo %s is running..'%n) demo(1) # 相当于auth(1) --> inner(1)

    以上,实现了有参装饰器

  • 相关阅读:
    MFC中注释含义
    数字时钟
    布线问题分支限界法
    精度计算大数阶乘ACM常用算法
    C++库大全
    简单文本编辑器制作windows程序设计雏形
    使用计时器方法2
    MFC常用基本数据类型
    Xcode 代码格式化/自动排版
    android的color值
  • 原文地址:https://www.cnblogs.com/linzetong/p/8303902.html
Copyright © 2011-2022 走看看