【代码技巧】python用装饰器监听函数输入输出,以及在类内启用禁用

news/发布时间2024/4/29 12:23:01

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/28172288.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

2022年A组国赛

2022年A组国赛 小蓝与钥匙 题目大意: ​​ 题解: 显然,$ans=C_{28}^{14}\cdot f\left[ 14 \right]$ 其中 f[i] 表示i个人都没拿到自己的钥匙的情况数 f[i] 的递推式见代码 Code: #include <bits/stdc++.h> using namespace std; #define ioss ios::sync_with_stdio(f…

信号的概念和机制

1.信号的概念和机制理解信号可以参考生活中,烽火、狼烟等 信号的特点:1.简单;2.不能携带大量信息;3.满足某个特设条件才发送1.1.信号的机制 信号时软件层面的“中断”,信号VS中断VS异常,三个概念可以一起学习 每个进程收到的所有信号,都是由内核负责发送、内核处理的 简…

毕设

后台管理模块搭建完毕

自动驾驶运动规划:碰撞检测算法之分离轴定理

基于包围形的方法是一种粗略的碰撞检测方法,基于外接圆形的方法运算速度很快,但精度很差;基于轴对齐包围矩形(AABB)的方法适合本身就是矩形的物体,其运算速度非常快,但检测精度还是不够。运动规划:碰撞检测算法之分离轴定理附赠自动驾驶全套学习资料和量产经验:链接 如…

Oracle导出数据库与还原

导出部分 1.获取到Oracle directory目录与实际电脑目录的映射2.CMD导出Oracle数据库 DMP文件 //expdp 用户/密码@数据库监听地址 schemas=表空间名称 dumpfile=自定义名称.dmp directory=DATA_DIR(上面SQL中DIRECTORY_NAME 选择一个导出的文件就会在对应的DIRECTORY_PAT…

维吉尼亚密码

在一个凯撒密码中,字母表中的每一字母都会作一定的偏移,例如偏移量为3时,A就转换为了D、B转换为了E……而维吉尼亚密码则是由一些偏移量不同的恺撒密码组成。 为了生成密码,需要使用表格法。这一表格(如图1所示)包括了26行字母表,每一行都由前一行向左偏移一位得到。具体…