问题标签 [monkeypatching]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
18 回答
312796 浏览

python - 向现有对象实例添加方法

我读过可以在 Python 中向现有对象(即不在类定义中)添加方法。

我知道这样做并不总是好的。但是如何做到这一点呢?

0 投票
2 回答
532 浏览

python - 我如何在python中进行monkeypatching?

我不得不在 python 中进行一些自省,但它并不漂亮:

得到类似的东西

在我们的调试输出中。

理想情况下,我希望在 stderr 中添加此类信息——是否可以在 python 中全局更改打印行为?

0 投票
5 回答
1125 浏览

java - BCEL == java 的猴子补丁吗?

前几天,一位同事向我指出了BCEL,从他的解释和快速阅读中我可以看出,这是一种在运行时修改字节码的方法。我的第一个想法是它听起来很危险,我的第二个想法是它听起来很酷。然后我想了想,想起了关于猴子补丁的编码恐怖帖子,并意识到这基本上是一回事。有没有人用过 BCEL 做任何实用的事情?我是对的,这基本上是运行时猴子补丁,还是我错过了什么?

0 投票
4 回答
1849 浏览

apache-flex - Patch flex framework to show preloader instantly?

In the Flex framework a custom preloader can be used while the site is loading.

In the Adobe docs it specifies that 'the progress bar [preloader] is displayed if less than half of the application is downloaded after 700 milliseconds of downloading.'

However I ALWAYS want the preloader to appear instantly since I know that 95% of our users are first time visitors and the site is over 500kb. I dont want people to have to wait .7 seconds for the preloader animation to appear.

I would think in theory that it is possible to 'monkey patch' the framework to remove this .7 second limitation. I dont have time to figure out how, and I've never done it before.

Anybody help?

0 投票
14 回答
25054 浏览

python - 你能在 Python 的核心类型上修改补丁方法吗?

Ruby 可以向 Number 类和其他核心类型添加方法以获得如下效果:

但似乎 Python 无法做到这一点。这是真的?如果是这样,为什么?这与无法修改类型的事实有关吗?

更新:与其谈论猴子补丁的不同定义,我只想关注上面的例子。正如你们中的一些人回答的那样,我已经得出结论,它不能做到。但我想更详细地解释为什么它不能完成,如果 Python 中可用的话,也许有什么功能允许这样做。

回答你们中的一些人:我可能想要这样做的原因仅仅是美学/可读性。

这读起来更像英语,并清楚地表明哪个是测试值,哪个是预期值,应该是:

这个概念是Rspec和其他一些 Ruby 框架所基于的。

0 投票
5 回答
900 浏览

apache-flex - 作为 RSL 加载时的猴子补丁 flex 框架?

我想将 flex 框架加载为 RSL(SWZ,使用播放器缓存),但我需要修补框架中的几个错误修复。

许多论坛认为这是不可能的。有没有人让这个工作?

0 投票
4 回答
2454 浏览

ruby - 修补 Ruby 的基类(例如 Fixnum)是否可以接受?

我对 Ruby 还是很陌生(通读 Pickaxe 并且大部分时间都花在irb了修补 Ruby 的基类。例如:我在这里回答了另一个 Ruby 问题,发帖人想知道如何从DateTime. 由于DateTime该类似乎没有提供此功能,因此我发布了一个答案,该答案将修补DateTimeFixnum类作为可能的解决方案。这是我提交的代码:

我修补了这些类,因为我认为在这种情况下,它会产生一种清晰、简洁的语法,用于从DateTime. 具体来说,由于上述代码,您可以执行以下操作:

看起来很漂亮,也很容易理解;但是,我不确定弄乱DateTime'-运算符的功能是否是个好主意。

对于这种情况,我能想到的唯一选择是:

DateTime1. 简单地即时创建一个新对象,在调用中计算新的小时值new


2. 编写一个实用方法,接受 aDateTime和要从中减去的小时数

基本上,只是方法(1)的包装:


3.添加一个新的方法来DateTime代替改变现有的行为#-()

也许是DateTime#less一种可以与Fixnum#hours补丁一起使用的新方法,以允许这样的语法:


然而,正如我已经提到的,我采用了修补方法,因为我认为它会产生更具表现力的语法。

我的方法有什么问题吗,或者我应该使用 3 种替代方法中的一种(或我没有想到的另一种)来做到这一点?我感觉打补丁正在成为我解决 Ruby 问题的新“锤子”,所以我想就我是否以“Ruby 方式”做事得到一些反馈。

0 投票
7 回答
4768 浏览

ruby-on-rails - 在 Rails 中向 Integer 类添加方法的最佳位置在哪里?

在 Rails 中向整数类添加方法的最佳位置在哪里?我想添加一个to_metersto_miles方法。

0 投票
8 回答
4304 浏览

ruby - 猴子修补VS。坚实的原则?

在一些个人项目中,我正在慢慢地从 PHP5 迁移到 Python,我目前很喜欢这种体验。在选择走 Python 路线之前,我查看了 Ruby。我从 ruby​​ 社区注意到的是,猴子修补既常见又备受推崇。我还遇到了很多关于调试 ruby​​ 软件试验的恐怖故事,因为有人包含一个相对无害的库来做一些小工作,但它在不告诉任何人的情况下修补了一些大量使用的核心对象。

我选择 Python 的原因之一是它更简洁的语法以及它可以完成 Ruby 可以做的所有事情。Python 使 OO 的点击率比 PHP 更好,我正在阅读越来越多的 OO 原则以增强对这种更好的理解。

今天晚上我一直在阅读关于罗伯特马丁的 SOLID原则:

  • 单一责任原则,
  • 闭原则,
  • L iskov替换原理,
  • 接口隔离原则,以及
  • 依赖倒置原则

我目前达到O软件实体(类、模块、功能等)应该对扩展开放,但对修改关闭

我的头脑在确保 OO 设计的一致性和整个猴子补丁之间的冲突。我知道可以在 Python 中进行猴子修补。我也明白,“pythonic”就是遵循常见的、经过充分测试的、oop 最佳实践和原则。

我想知道的是社区对这两个对立主题的看法;它们如何互操作,何时最好使用一个,是否应该进行猴子修补......希望你能为我提供解决方案。

0 投票
3 回答
23686 浏览

python - 在python中扩展内置类

如何在 python 中扩展内置类?我想向 str 类添加一个方法。
我做了一些搜索,但我发现的只是旧帖子,我希望有人知道更新的东西。