当前位置:首页 > 行业动态 > 正文

python常用装饰器

在Python中,装饰器是一种用于修改或增强函数、方法或类的行为的特殊类型的函数,它们允许你在不改变原始代码的情况下,为函数或类添加额外的功能,本回答将介绍几个常用的Python装饰器,并给出详细的技术教学。

1、内置装饰器 @property

@property 是一个内置的装饰器,用于将一个方法转换为属性,使其可以像访问属性一样访问方法,这对于实现getter和setter方法非常有用。

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    @property
    def name(self):
        return self._name
    @property
    def age(self):
        return self._age
    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("年龄不能为负数")
        self._age = value
p = Person("张三", 25)
print(p.name)  # 输出:张三
print(p.age)   # 输出:25
p.age = 30     # 设置年龄为30
print(p.age)   # 输出:30 

2、内置装饰器 @staticmethod 和 @classmethod

@staticmethod 和 @classmethod 是两个内置的装饰器,用于定义静态方法和类方法,静态方法不需要实例化对象就可以调用,而类方法需要通过类名调用。

class Math:
    @staticmethod
    def add(a, b):
        return a + b
    @classmethod
    def multiply(cls, a, b):
        return a * b
print(Math.add(1, 2))  # 输出:3
print(Math.multiply(2, 3))  # 输出:6 

3、装饰器 functools.wraps

functools.wraps 是一个用于更新包装函数的元信息的装饰器,它可以确保原始函数的名称、文档字符串等信息在被装饰后保持不变。

import functools
def my_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("在函数执行前做一些操作")
        result = func(*args, **kwargs)
        print("在函数执行后做一些操作")
        return result
    return wrapper
@my_decorator
def add(a, b):
    """这是一个加法函数"""
    return a + b
print(add.__name__)  # 输出:add
print(add.__doc__)   # 输出:这是一个加法函数 

4、装饰器 functools.lru_cache

functools.lru_cache 是一个用于缓存函数结果的装饰器,它可以提高函数的执行效率,特别是在处理重复计算时非常有用。

import functools
@functools.lru_cache(maxsize=None)
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n1) + fibonacci(n2)
print(fibonacci(100))  # 输出:354224848179261915075 

以上就是一些常用的Python装饰器的介绍和技术教学,使用装饰器可以让你的代码更加简洁、高效和易于维护,希望对你有所帮助!

0