Python装饰器

2019-06-22  本文已影响0人  Recalcitrant

Python装饰器

一、函数装饰器

1.无参装饰器

# 装饰器定义
def outter_wrapper(fun):
    def inner_fun(*args, **kwargs):
        内层函数体

    return inner_fun


# 使用装饰器
@outter_wrapper
def func():
    被修饰函数函数体

示例:日志记录装饰器

def log_wrapper(fun):
    def inner_fun(*args, **kwargs):
        print("用户输入:", args)
        rs = fun(*args, **kwargs)
        print("系统返回结果:", rs)

    return inner_fun


@log_wrapper
def login(username, pwd):
    if username == 'zhangsan' and pwd == '123':
        return True

    return False


rs = login('zhangsan', '123')
运行结果

2.带参装饰器

示例:

def valid_param(length):
    def inner_wrapper(fun):
        def inner_fun(*args, **kwargs):
            print("验证数据有效性:")
            username = kwargs.get("username")
            pwd = kwargs.get("pwd")

            if len(username) < length:
                print("用户名长度不合法!(长度小于了{})".format(length))
                return "Invalid"
            if len(pwd) < length:
                print("密码长度不合法!(长度小于了{})".format(length))
                return "Invalid"

            return "Valid"
        return inner_fun
    return inner_wrapper


@valid_param(4)
def login(username, pwd):
    if username == 'zhangsan' and pwd == '123':
        return True

    return False


rs = login(username='zhangsan', pwd='123')
print(rs)
运行结果

二、类装饰器

# 装饰器定义
def class_wrapper(cls):
    class WrapperClass:
        类体
    return WrapperClass


# 使用装饰器
@valid_user_exist
class Class:
    被修饰类类体

示例:

def valid_user_exist(cls):
    class WrapperClass:
        def __init__(self, username, pwd):
            self.username = username
            self.pwd = pwd

        def register(self):
            if self.username == 'zhangsan':
                return "username existed!"

            wrapper = cls(self.username, self.pwd)
            wrapper.register()
            return "registration success!"
    return WrapperClass


@valid_user_exist
class User:
    def __init__(self, username, pwd):
        self.username = username
        self.pwd = pwd

    def register(self):
        print(self.username + "注册成功~!")


print("**********************")
u1 = User('zhangsan', '1234')
rs1 = u1.register()
print(rs1)
print("**********************")
u2 = User('lisi', '1234')
rs2 = u2.register()
print(rs2)
print("**********************")
运行结果
上一篇 下一篇

猜你喜欢

热点阅读