【发布时间】:2010-08-10 14:58:44
【问题描述】:
随着时间的推移,我发现需要从 Python 中重写几个 stdlib 方法,以克服限制或添加一些缺失的功能。
在所有情况下,我都添加了一个包装器函数,并用我的包装器替换了模块中的原始方法(包装器调用了原始方法)。
我为什么这样做?只是为了确保对该方法的所有调用都使用我的新版本,即使这些是从其他第三方模块调用的。
我知道 monkeypatching 可能是一件坏事,但我的问题是,如果您小心使用它是否有用? 意思是:
- 您仍然调用原始方法,确保在更新原始模块时您不会遗漏任何内容
- 您没有改变方法的原始“含义”
例子:
- 添加coloring support to python logging module。
- 使用文本模式时生成open() be able to recognize Unicode BOM masks
- 为
os.system()或subprocess.Popen()添加日志记录支持 - 让您输出到控制台或/并重定向到另一个文件。 - 实现您的平台上缺少的方法,例如 Windows 上缺少的
os.chown()或os.lchown()。
在我看来,这样的事情是不错的替代,但我想看看其他人如何看待它们,特别是什么应该被视为可接受的猴子补丁,什么不是。
【问题讨论】:
标签: python word-wrap monkeypatching