Python装饰器在面向对象编程中的应用实例
发布时间:2023-12-18 02:49:13
Python装饰器在面向对象编程中的应用主要是用于修改、扩展或包装类的方法的功能,而不需要改变原来的类的结构或功能。下面是一个使用装饰器的实例,展示了如何使用装饰器来实现对类方法的日志记录功能。
import logging
# 创建一个装饰器函数,用于添加日志记录功能
def log_decorator(func):
def wrapper(*args, **kwargs):
# 记录日志信息
logging.info(f"Calling {func.__name__} with args: {args}, kwargs: {kwargs}")
# 调用原始函数
result = func(*args, **kwargs)
# 记录日志信息
logging.info(f"{func.__name__} returned {result}")
return result
return wrapper
# 创建一个日志记录器
logging.basicConfig(level=logging.INFO)
# 创建一个示例类
class Calculator:
# 添加装饰器来记录日志
@log_decorator
def add(self, a, b):
return a + b
# 添加装饰器来记录日志
@log_decorator
def subtract(self, a, b):
return a - b
# 创建一个计算器对象
calculator = Calculator()
# 调用计算器对象的方法,并自动记录日志
result = calculator.add(2, 3) # 输出:INFO:root:Calling add with args: (2, 3), kwargs: {}
# INFO:root:add returned 5
print(result) # 输出:5
result = calculator.subtract(5, 2) # 输出:INFO:root:Calling subtract with args: (5, 2), kwargs: {}
# INFO:root:subtract returned 3
print(result) # 输出:3
在上面的例子中,我们定义了一个装饰器函数log_decorator,它接受一个函数作为参数,并返回一个装饰后的函数。装饰后的函数wrapper用于添加日志记录的功能,它先记录日志信息,然后调用原始函数,并记录返回结果的日志信息。最后,它返回原始函数的返回结果。
我们创建了一个示例类Calculator,它有add和subtract两个方法。使用@log_decorator装饰器语法来对这两个方法进行装饰,从而实现了对这两个方法的日志记录功能。当我们调用calculator.add(2, 3)时,装饰器会自动记录相应的日志信息,包括调用方法的参数和返回结果。
通过使用装饰器,我们可以在不改变原始类的代码的情况下,为其添加额外的功能。这使得我们可以在面向对象编程中更加灵活地修改和扩展类的功能。
