在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装饰器的介绍和技术教学,使用装饰器可以让你的代码更加简洁、高效和易于维护,希望对你有所帮助!
原创文章,作者:酷盾叔,如若转载,请注明出处:https://www.kdun.com/ask/301112.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复