Python 的装饰器(Decorator)目录文章: Python 装饰器 (decorator): @classmethod Python 装饰器 (decorator): @staticmethod Python 装饰器 (decorator): @property 与 @setter Python 装饰器 (decorator) @abstractmethod

什么是 Python 的装饰器(Decorator)?

装饰器(Decorator)是 Python 中一种用来修改函数、方法或类的行为的设计模式。它可以在不改变原始代码的情况下,对函数或类进行扩展或增强。装饰器本质上是一个接受函数或类作为输入,并返回一个新函数或类的高阶函数。

为什么需要装饰器?

装饰器的主要用途是提高代码的可重用性和可读性,尤其在需要执行**相同的逻辑操作(如权限检查、日誌记录、性能分析等)**时非常有用。

  • 减少重复代码:通过装饰器实现功能共享。
  • 分离关注点:将功能逻辑与业务逻辑分离,让代码更清晰。
  • 动态添加功能:可以根据条件在运行时动态地为函数或类添加行为。

装饰器的语法

装饰器通过在函数或类定义前加上 @decorator_name 的语法糖来使用。

@decorator_name
def my_function():
pass

def my_function():
pass

my_function = decorator_name(my_function)

更多详细装饰器 (decorator)文章: Python 装饰器 (decorator): @staticmethod Python 装饰器 (decorator): @classmethod Python 装饰器 (decorator): @property 与 @setter Python 装饰器 (decorator) @abstractmethod

装饰器
功能描述
适用范例
范例简化代码
@staticmethod 将方法定义为静态方法,与实例无关,不需要 self 或 cls 不需要访问类或实例属性时使用 @staticmethoddef greet(): print("Hello!")
@classmethod 将方法定义为类方法,第一个参数是类本身(cls) 访问或修改类属性时使用 @classmethoddef set_value(cls, val): cls.val = val
@property 将方法定义为属性,允许通过属性语法访问 定义只读属性或控制属性访问 @propertydef value(self): return self._value
@functools.wraps 保留被装饰函数的原始名称和文档字串(__name__ 和 __doc__) 自定义装饰器时使用 @wraps(func)
@abstractmethod 定义抽象方法,强制子类实现该方法 设计抽象类时使用 @abstractmethoddef calculate(self): pass
@lru_cache 使用内存缓存提高函数执行效率 频繁调用且输出相同的函数(如递归) @lru_cache(maxsize=128)
@dataclass 自动生成类的初始化方法及其他特性,简化封装数据的类 封装数据时使用 @dataclassclass Point: x: int; y: int
自定义装饰器 动态为函数或方法添加功能 记录日誌、性能分析等功能 @log_timedef process_data(): pass