1. 装饰器监听函数输入输出
def monitor(func):def wrapper(*args, **kwargs):print(f"Function {func.__name__} called with args: {args}, kwargs: {kwargs}")result = func(*args, **kwargs)print(f"Function {func.__name__} returned: {result}")return resultreturn wrapper# 使用装饰器监听函数的输入和输出
@monitor
def add(a, b):return a + bresult = add(3, 5)
# 输出:
# Function add called with args: (3, 5), kwargs: {}
# Function add returned: 8
2. 类内启用禁用:
def monitor(func):def wrapper(self, *args, **kwargs):if self.monitor_enabled:print(f"Function {func.__name__} called with args: {args}, kwargs: {kwargs}")result = func(self, *args, **kwargs)if self.monitor_enabled:print(f"Function {func.__name__} returned: {result}")return resultreturn wrapperclass MyClass:def __init__(self):self.monitor_enabled = Truedef enable_monitor(self):self.monitor_enabled = Truedef disable_monitor(self):self.monitor_enabled = False@monitordef my_method(self, arg):print("Inside my_method")return arg * 2
测试输出:
obj = MyClass()
obj.my_method(3) # 使用监听
obj.disable_monitor() # 禁用监听
obj.my_method(4) # 不使用监听
obj.enable_monitor() # 启用监听
obj.my_method(5) # 使用监听>>>Function my_method called with args: (3,), kwargs: {}
>>>Inside my_method
>>>Function my_method returned: 6
>>>Inside my_method
>>>Function my_method called with args: (5,), kwargs: {}
>>>Inside my_method
>>>Function my_method returned: 10