问题标签 [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.
python - 向现有对象实例添加方法
我读过可以在 Python 中向现有对象(即不在类定义中)添加方法。
我知道这样做并不总是好的。但是如何做到这一点呢?
python - 我如何在python中进行monkeypatching?
我不得不在 python 中进行一些自省,但它并不漂亮:
得到类似的东西
在我们的调试输出中。
理想情况下,我希望在 stderr 中添加此类信息——是否可以在 python 中全局更改打印行为?
java - BCEL == java 的猴子补丁吗?
前几天,一位同事向我指出了BCEL,从他的解释和快速阅读中我可以看出,这是一种在运行时修改字节码的方法。我的第一个想法是它听起来很危险,我的第二个想法是它听起来很酷。然后我想了想,想起了关于猴子补丁的编码恐怖帖子,并意识到这基本上是一回事。有没有人用过 BCEL 做任何实用的事情?我是对的,这基本上是运行时猴子补丁,还是我错过了什么?
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?
python - 你能在 Python 的核心类型上修改补丁方法吗?
Ruby 可以向 Number 类和其他核心类型添加方法以获得如下效果:
但似乎 Python 无法做到这一点。这是真的?如果是这样,为什么?这与无法修改类型的事实有关吗?
更新:与其谈论猴子补丁的不同定义,我只想关注上面的例子。正如你们中的一些人回答的那样,我已经得出结论,它不能做到。但我想更详细地解释为什么它不能完成,如果 Python 中可用的话,也许有什么功能允许这样做。
回答你们中的一些人:我可能想要这样做的原因仅仅是美学/可读性。
这读起来更像英语,并清楚地表明哪个是测试值,哪个是预期值,应该是:
这个概念是Rspec和其他一些 Ruby 框架所基于的。
apache-flex - 作为 RSL 加载时的猴子补丁 flex 框架?
我想将 flex 框架加载为 RSL(SWZ,使用播放器缓存),但我需要修补框架中的几个错误修复。
许多论坛认为这是不可能的。有没有人让这个工作?
ruby - 修补 Ruby 的基类(例如 Fixnum)是否可以接受?
我对 Ruby 还是很陌生(通读 Pickaxe 并且大部分时间都花在irb
了修补 Ruby 的基类。例如:我在这里回答了另一个 Ruby 问题,发帖人想知道如何从DateTime
. 由于DateTime
该类似乎没有提供此功能,因此我发布了一个答案,该答案将修补DateTime
和Fixnum
类作为可能的解决方案。这是我提交的代码:
我修补了这些类,因为我认为在这种情况下,它会产生一种清晰、简洁的语法,用于从DateTime
. 具体来说,由于上述代码,您可以执行以下操作:
看起来很漂亮,也很容易理解;但是,我不确定弄乱DateTime
'-
运算符的功能是否是个好主意。
对于这种情况,我能想到的唯一选择是:
DateTime
1. 简单地即时创建一个新对象,在调用中计算新的小时值new
2. 编写一个实用方法,接受 aDateTime
和要从中减去的小时数
基本上,只是方法(1)的包装:
3.添加一个新的方法来DateTime
代替改变现有的行为#-()
也许是DateTime#less
一种可以与Fixnum#hours
补丁一起使用的新方法,以允许这样的语法:
然而,正如我已经提到的,我采用了修补方法,因为我认为它会产生更具表现力的语法。
我的方法有什么问题吗,或者我应该使用 3 种替代方法中的一种(或我没有想到的另一种)来做到这一点?我感觉打补丁正在成为我解决 Ruby 问题的新“锤子”,所以我想就我是否以“Ruby 方式”做事得到一些反馈。
ruby-on-rails - 在 Rails 中向 Integer 类添加方法的最佳位置在哪里?
在 Rails 中向整数类添加方法的最佳位置在哪里?我想添加一个to_meters
和to_miles
方法。
ruby - 猴子修补VS。坚实的原则?
在一些个人项目中,我正在慢慢地从 PHP5 迁移到 Python,我目前很喜欢这种体验。在选择走 Python 路线之前,我查看了 Ruby。我从 ruby 社区注意到的是,猴子修补既常见又备受推崇。我还遇到了很多关于调试 ruby 软件试验的恐怖故事,因为有人包含一个相对无害的库来做一些小工作,但它在不告诉任何人的情况下修补了一些大量使用的核心对象。
我选择 Python 的原因之一是它更简洁的语法以及它可以完成 Ruby 可以做的所有事情。Python 使 OO 的点击率比 PHP 更好,我正在阅读越来越多的 OO 原则以增强对这种更好的理解。
今天晚上我一直在阅读关于罗伯特马丁的 SOLID原则:
- 单一责任原则,
- 开闭原则,
- L iskov替换原理,
- 接口隔离原则,以及
- 依赖倒置原则
我目前达到O:软件实体(类、模块、功能等)应该对扩展开放,但对修改关闭。
我的头脑在确保 OO 设计的一致性和整个猴子补丁之间的冲突。我知道可以在 Python 中进行猴子修补。我也明白,“pythonic”就是遵循常见的、经过充分测试的、oop 最佳实践和原则。
我想知道的是社区对这两个对立主题的看法;它们如何互操作,何时最好使用一个,是否应该进行猴子修补......希望你能为我提供解决方案。
python - 在python中扩展内置类
如何在 python 中扩展内置类?我想向 str 类添加一个方法。
我做了一些搜索,但我发现的只是旧帖子,我希望有人知道更新的东西。