如何不修改原始文件而改变库代码的行为?

2021-09-29 11:29:53 +08:00
 shyrock
比如我用的框架库里有个 expression 类,我发现这个类有个 bug,如果我直接修改这个类可以修复 bug 。
但是因为这个类并不在我的源代码管理中,而是定期从厂商那里获取新版本更新的,
所以我希望在我的代码里面加入一个补丁来修改框架库中 expression 类的行为。

有一些情况我认为可以使用猴子补丁,那就是 expression 类生成了全局对象,通过在运行期修改这个对象就可以修改系统的行为。
可是如果其他代码都是局部调用 expression 类生成临时对象的话,猴子补丁就没效果了。

求各位彦祖指点。
1599 次点击
所在节点    Python
4 条回复
deplivesb
2021-09-29 11:39:28 +08:00
直接在 globals 替换掉 expression ? 我不知道这样可行不
shyrock
2021-09-29 11:41:38 +08:00
@zhangdeplives #1 能否具体一点?
wenqiang1208
2021-09-29 16:44:15 +08:00
猴子补丁,在项目启动时,执行一下, 项目中所有引用的地方 就可以生效
shyrock
2021-09-29 16:55:39 +08:00
@wenqiang1208 #3 对的。我之前对猴子补丁的理解狭隘了。
猴子补丁既可以应用于对象,也可以应用于类。
在应用于类的情况下,是可以全局起效的,并且对模块加载顺序无要求。

结帖。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/805106

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX