Python 装饰器:简化代码

碧海醫心
发布: 2024-09-26 08:00:21
转载
1074人浏览过

python 装饰器:简化代码

python 中的装饰器是一个强大的工具,允许您修改函数或方法的行为,而无需更改其源代码。它们提供了一种添加功能的简洁方法,并广泛用于日志记录、执行规则和优化性能。

在这篇文章中,我们将通过简单的示例来了解六种常见的 python 装饰器。

1 - @staticmethod: 定义静态方法

@staticmethod 装饰器创建不访问实例(self)或类(cls)数据的方法。它的行为类似于常规函数,但可以从类或实例中调用。

立即学习Python免费学习笔记(深入)”;

示例:

class myclass:
    @staticmethod
    def greet():
        return "hello from static method!"

登录后复制

2 - @classmethod: 定义类方法

@classmethod 装饰器允许您定义以类 (cls) 作为第一个参数的方法。这对于工厂方法或更改类状态很有用。

示例:

class myclass:
    count = 0

    @classmethod
    def increment_count(cls):
        cls.count += 1
登录后复制

3 - @property: 定义只读属性

@property 装饰器允许像属性一样访问方法。当您想要控制对属性的访问而不暴露内部实现时,它非常有用。

示例:

class circle:
    def __init__(self, radius):
        self._radius = radius

    @property
    def area(self):
        return 3.14 * self._radius ** 2
登录后复制

4 - @functools.lru_cache:缓存昂贵的函数结果

@lru_cache 装饰器(来自 functools)缓存函数调用的结果以避免重新计算。这可以显着提高昂贵或频繁调用的函数的性能。

示例:

from functools import lru_cache

@lru_cache(maxsize=32)
def expensive_computation(x):
    return x ** 2
登录后复制

5 - @functools.wraps:在自定义装饰器中保留元数据

编写自定义装饰器时,@wraps 装饰器会保留原始函数的元数据(名称、文档字符串),确保内省工具仍然有效。

示例:

from functools import wraps

def my_decorator(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)
    return wrapper
登录后复制

6 - @dataclass:简化类定义

@dataclass 装饰器(来自 dataclasses 模块)自动为类生成 init() 和 repr() 等方法。它非常适合数据保存类。

示例:

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int
登录后复制

结论

@staticmethod、@classmethod、@property、@lru_cache、@wraps 和 @dataclass 等 python 装饰器通过将功能包装在方法和函数周围,帮助编写更干净、更高效的代码。它们是多功能工具,可以简化许多编程任务。

来源

python 装饰器定义
@静态方法
@classmethod
@属性
@functools.lru_cache
@functools.wraps
@数据类

以上就是Python 装饰器:简化代码的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:dev.to网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号