wrapt 一个方便的python装饰器包

wrapt 一个方便的python装饰器包,提供了装饰器包装,以及猴子补丁能力,是一个很值得使用的包

一个简单猴子补丁玩法

  • 业务场景

有一个登陆方法,需要进行日志记录,但是不想直接修改原始代码
参考代码
my.py

def login(name,password):
    return f"Welcome {name}! Your password is {password}"
  • 基于wrapt的多猴子补丁解决方法
    wra.py
import wrapt
@wrapt.patch_function_wrapper('my', 'login')
def my_wrapper(wrapped, instance, args, kwargs):
    print("Before method",args,kwargs)
    result = wrapped(*args, **kwargs)
    print("After method")
    return result
  • 使用

demo2.py 注意顺序很重要,应该先导入包装的,然后是实际要使用的

from wra import *
from my import login
print(login("Alice","1234"))
  • 效果

说明

wrapt 支持的猴子补丁玩法,对于我们快速进行python 包的调整是很方便的,同时作者github上的一个博客也值得学习下

参考资料

https://github.com/GrahamDumpleton/wrapt
https://wrapt.readthedocs.io/en/master/quick-start.html
https://github.com/GrahamDumpleton/wrapt/blob/develop/blog/11-safely-applying-monkey-patches-in-python.md

posted on   荣锋亮  阅读(39)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2022-08-31 主机网络限速+测速工具
2022-08-31 nginx proxy_pass 包含路径问题
2022-08-31 windows jenkins openssh 集成问题
2020-08-31 orika java bean 转换工具试用
2020-08-31 graalvm js 内置commonjs 模式试用
2020-08-31 graalvm js 与java 类型转换的一些方法
2019-08-31 haproxy 2.0 dataplaneapi docker 镜像

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示