美文网首页
Python装饰器

Python装饰器

作者: Recalcitrant | 来源:发表于2019-06-22 14:46 被阅读0次

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("**********************")
运行结果

相关文章

  • 装饰器模式

    介绍 在python装饰器学习 这篇文章中,介绍了python 中的装饰器,python内置了对装饰器的支持。面向...

  • python中的装饰器

    python装饰器详解 Python装饰器学习(九步入门) 装饰器(decorator) 就是一个包装机(wrap...

  • [译] Python装饰器Part II:装饰器参数

    这是Python装饰器讲解的第二部分,上一篇:Python装饰器Part I:装饰器简介 回顾:不带参数的装饰器 ...

  • Python中的装饰器

    Python中的装饰器 不带参数的装饰器 带参数的装饰器 类装饰器 functools.wraps 使用装饰器极大...

  • Python进阶——面向对象

    1. Python中的@property   @property是python自带的装饰器,装饰器(decorat...

  • Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方

    Python 装饰器简介装饰器(Decorator)是 Python 非常实用的一个语法糖功能。装饰器本质是一种返...

  • Python装饰器

    Python装饰器 一、函数装饰器 1.无参装饰器 示例:日志记录装饰器 2.带参装饰器 示例: 二、类装饰器 示例:

  • python3基础---详解装饰器

    1、装饰器原理 2、装饰器语法 3、装饰器执行的时间 装饰器在Python解释器执行的时候,就会进行自动装饰,并不...

  • 2019-05-26python装饰器到底是什么?

    装饰器例子 参考语法 装饰器是什么?个人理解,装饰器,是python中一种写法的定义。他仍然符合python的基本...

  • 2018-07-18

    Python装饰器 装饰,顾名思义,是用来打扮什么东西的。Python装饰...

网友评论

      本文标题:Python装饰器

      本文链接:https://www.haomeiwen.com/subject/ffigfctx.html