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