美文网首页
Python中常见的装饰器有函数装饰器、类装饰器、属性装饰器和方

Python中常见的装饰器有函数装饰器、类装饰器、属性装饰器和方

作者: DD丿 | 来源:发表于2023-03-30 09:55 被阅读0次

1.函数装饰器

函数装饰器是最常见的装饰器,它的作用是在不改变原函数代码的情况下,为函数添加一些额外的功能,比如日志记录、性能分析等。

例如,下面的代码实现了一个简单的函数装饰器,它记录了函数的执行时间:

import time

def timer(func):

    def wrapper(*args, **kwargs):

        start_time= time.time()

        result= func(*args, **kwargs)

        end_time= time.time()

        print(f"执行时间:{end_time- start_time:.5f}秒")

        return result

return wrapper

@timer

def my_function():

    time.sleep(1)

    print("函数执行完毕")

my_function()

输出:

函数执行完毕执行时间:1.00044秒

2.类装饰器

类装饰器是用来装饰类的,它的作用是在不改变原类定义的情况下,为类添加一些额外的功能,比如给类添加属性、修改类方法等。

例如,下面的代码实现了一个简单的类装饰器,它为类添加了一个名为name的属性:

def add_name(cls):

    cls.name= "MyClass"

    return cls

@add_name

class MyClass:

    pass

print(MyClass.name)

输出:

MyClass

3.属性装饰器

属性装饰器是用来装饰类的属性的,它的作用是在不改变原属性定义的情况下,为属性添加一些额外的功能,比如类型检查、缓存等。

例如,下面的代码实现了一个简单的属性装饰器,它为一个类的属性添加了类型检查:

def type_check(attr_type):

    def decorator(func):

        def wrapper(self, value):

            if not isinstance(value, attr_type):

                raise ValueError(f"属性值必须是{attr_type}类型")

            func(self, value)

        return wrapper

return decorator

class MyClass:

    @type_check(int)

    def set_value(self, value):

        self._value= value

my_object= MyClass()

my_object.set_value(10)

my_object.set_value("Hello")  # 抛出异常

输出:

ValueError: 属性值必须是<class 'int'>类型

4.方法装饰器

方法装饰器是用来装饰类的方法的,它的作用是在不改变原方法定义的情况下,为方法添加一些额外的功能,比如权限检查、缓存等。

例如,下面的代码实现了一个简单的方法装饰器,它为一个类的方法添加了缓存:

def cache(func):

    cache_dict= {}

    def wrapper(self, *args):

        key= (func.__name__, args)

        if keyin cache_dict:

            print("从缓存中获取数据")

            return cache_dict[key]

        else:

            result= func(self, *args)

            cache_dict[key] = result

print("计算结果并缓存")

            return result

return wrapper

class MyClass:

    @cache

    def get_value(self, x):

        return x ** 2

my_object= MyClass()

print(my_object.get_value(2))

print(my_object.get_value(2))

输出:

计算结果并缓存

4

从缓存中获取数据

4

相关文章

  • typescript 五种装饰器

    装饰器类型 装饰器的类型有:类装饰器、访问器装饰器、属性装饰器、方法装饰器、参数装饰器,但是没有函数装饰器(fun...

  • Python装饰器

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

  • 解惑,从新认识python装饰器

    概念 python有两种装饰器: 函数装饰器(function decorators) 类装饰器(class de...

  • TS装饰器初体验,用装饰器管理koa接口

    typescript中的装饰器有很多种,比如类装饰器、方法装饰器、属性装饰器等等,先看看装饰器的定义吧,下面以类装...

  • 装饰器

    装饰器 decorator类装饰器 带参数的装饰器 举例(装饰器函数;装饰器类;有参与无参) https://fo...

  • 装饰器实验

    装饰器实验 说明 ts内包含了四个装饰器,类装饰器、属性装饰器、函数装饰器、参数装饰器,本文中测试一下其的使用。 ...

  • Python中的装饰器

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

  • TypeScript装饰器

    前言 装饰器分类 类装饰器 属性装饰器 方法装饰器 参数装饰器需要在tsconfig.json中启用experim...

  • 装饰器

    """@装饰器- 普通装饰器- 带参数的装饰器- 通用装饰器- 装饰器装饰类- 内置装饰器- 缓存装饰器- 类实现...

  • python之装饰器模版

    装饰器的作用:装饰器即可以装饰函数也可以装饰类。装饰器的原理:函数也是对象 1.定义装饰器 2.使用装饰器假设de...

网友评论

      本文标题:Python中常见的装饰器有函数装饰器、类装饰器、属性装饰器和方

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