问题标签 [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 投票
1 回答
1342 浏览

python - 在 Python 中修补类

假设我有一个要添加额外属性的 Python 类。

有没有区别

并使用类似的东西:

?

如果不是,为什么人们似乎做第二个而不是第一个?(例如这里http://concisionandconcinnity.blogspot.com/2008/10/chaining-monkey-patches-in-python.html

0 投票
3 回答
320 浏览

c# - 在 IronPython 中重新声明 .net 类

谁能告诉我是否可以在 IronPython 中重新声明一个 C# 类?如果我有一个 C# 类,我可以从 IronPython 中对其进行猴子补丁吗?

0 投票
3 回答
8058 浏览

django - 在不更改原始 Django App 的情况下向 Django FlatPages 添加功能

我想在 Django FlatPage 数据库模型中添加一个字段,但我真的不知道如何在不编辑原始应用程序的情况下扩展它。

我想要做的是将以下字段添加到模型中:

如何将它添加到 FlatPage 模型?

提前致谢

0 投票
1 回答
985 浏览

ruby-on-rails - 重写控制器中的基类方法

我试图欺骗一个非常复杂的黑盒子以不同的方式显示一些浮点数(它是 Gruff 图形库,所以它被渲染为图像)。

在控制台中,我可以粘贴这个:

我会看到

但是如果我将相同的代码粘贴到控制器中,我会看到

为什么我不能在控制器中替换 Float.to_s?我也将接受对“什么是更好的方法来实现这一点?”这个问题的回答。

0 投票
2 回答
288 浏览

ruby-on-rails - 如何让 Rails 停止重新加载我的 gem?

我有一颗宝石:

我将它加载到 Rails 中:

并使用它:

但我需要以特定于环境的方式对其进行修补:

不幸的是,MyGem每次请求都会重新加载,所以我的猴子补丁没用。

我检查过load_once_paths

知道如何获得我想要的效果吗?

0 投票
1 回答
3059 浏览

ruby-on-rails - 修补红宝石

在 Rails 应用程序中将简单补丁应用到 Ruby gem 的最佳方法是什么?

是否可以保持原始 gem 代码不变?

0 投票
25 回答
316836 浏览

python - 如何动态地将属性添加到类中?

目标是创建一个行为类似于 db 结果集的模拟类。

因此,例如,如果使用 dict 表达式返回数据库查询{'ab':100, 'cd':200},那么我希望看到:

起初我想也许我可以这样做:

c.ab返回一个属性对象。

用替换setattr线k = property(lambda x: vs[i])根本没有用。

那么在运行时创建实例属性的正确方法是什么?

PS 我知道如何使用该__getattribute__方法?

0 投票
5 回答
1927 浏览

python - Django 和猴子补丁问题

我最近开始在业余时间尝试使用 Django 开发一些 Web 应用程序。在为一个人设计数据模型时,我遇到了使用继承定义网站用户或使用框架已经提供的 User 类的猴子修补技术的两难境地。

我试图通过(在没有错误地定义我的所有模型等之后,根据python manage.py validate)添加一个字段:

User.add_to_class('location', models.CharField(max_length=250,blank=True))

并执行了syncdb命令。但是,我不断收到此错误

OperationalError:没有这样的列:auth_user.location

无论我是在站点的管理员视图中还是在 manage.py shell 中。我必须缺少一个额外的步骤,但是关于整个猴子修补技术的文档似乎有限。所以我在诉诸继承之前请你帮忙。当然,欢迎任何代码、提示或指向其他文档的指针。

提前致谢。

PS。我知道这种技术很丑陋,而且可能是不明智的。;)

0 投票
5 回答
254 浏览

python - 是否可以在 python 中转移模块?(ResourceX 转移到 ResourceXSimulated)

我想模拟导入模块(ResourceX)的 MyApp,该模块需要当时不可用且无法工作的资源。

一个解决方案是制作并导入 ResourceX 的模拟模块(名为 ResourceXSimulated)并将其作为 ResourceX 转移到 MyApp。我想这样做是为了避免破坏大量代码并从 MyApp 获取各种异常。

我正在使用 Python,它应该类似于:

“将 ResourceX 模拟为 ResourceX 导入”

“ResourceX.getData()”,实际上调用了 ResourceXSimultated.getData()

期待了解 Python 是否支持这种重定向。

干杯。

附加信息:我可以访问源文件。

更新:我正在考虑向 MyApp 添加尽可能少的关于使用 fake 模块的代码,并将此代码添加到 import 语句附近。

0 投票
6 回答
832 浏览

ruby - 扩展 uniq 方法

这是 Ruby 1.8 问题:

我们都知道如何使用Array#uniq

但是我想知道我们是否可以通过猴子修补它来处理复杂的对象。当前的行为是这样的:

请求的是: