jjzjj

monkeypatching

全部标签

ruby - 如何正确地对 Ruby 进行 monkeypatch?

我正在尝试对标准库中Net类中的一行进行monkeypatch。我在项目的lib文件夹中创建了一个名为patches.rb的文件并添加了这个moduleNetclassHTTP但它不起作用。我这样做对吗?(这与继承层次结构完全平行。)编辑:部分问题是我必须将文件放在initalizers文件夹中。但仍然看到相同的错误。 最佳答案 因为lib/目录中的东西只按需加载,你可能会更成功地将这样的补丁放在config/initializers/中,它们会在之后自动加载堆栈已初始化。您还可以将扩展的定义折叠成这样:moduleNet::HTT

python - 什么是猴子补丁?

我想了解,什么是猴子补丁或猴子补丁?这是否类似于方法/运算符重载或委托(delegate)?这些东西有什么共同点吗? 最佳答案 不,它不像那些东西。它只是在运行时动态替换属性。例如,考虑一个具有get_data方法的类。此方法执行外部查找(例如,在数据库或WebAPI上),类中的各种其他方法调用它。但是,在单元测试中,您不想依赖外部数据源-因此您可以将get_data方法动态替换为返回一些固定数据的stub。因为Python类是可变的,而方法只是类的属性,所以您可以随心所欲地执行此操作-事实上,您甚至可以以完全相同的方式替换模块中的

python - 什么是猴子补丁?

我想了解,什么是猴子补丁或猴子补丁?这是否类似于方法/运算符重载或委托(delegate)?这些东西有什么共同点吗? 最佳答案 不,它不像那些东西。它只是在运行时动态替换属性。例如,考虑一个具有get_data方法的类。此方法执行外部查找(例如,在数据库或WebAPI上),类中的各种其他方法调用它。但是,在单元测试中,您不想依赖外部数据源-因此您可以将get_data方法动态替换为返回一些固定数据的stub。因为Python类是可变的,而方法只是类的属性,所以您可以随心所欲地执行此操作-事实上,您甚至可以以完全相同的方式替换模块中的

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

我读到可以在Python中向现有对象(即不在类定义中)添加方法。我知道这样做并不总是好的。但是如何做到这一点呢? 最佳答案 在Python中,函数和绑定(bind)方法是有区别的。>>>deffoo():...print"foo"...>>>classA:...defbar(self):...print"bar"...>>>a=A()>>>foo>>>a.bar>>>>已绑定(bind)的方法已“绑定(bind)”(如何描述)到一个实例,并且该实例将作为第一个参数在方法被调用时传递。不过,作为类属性(而不是实例)的可调用对象仍然是未

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

我读到可以在Python中向现有对象(即不在类定义中)添加方法。我知道这样做并不总是好的。但是如何做到这一点呢? 最佳答案 在Python中,函数和绑定(bind)方法是有区别的。>>>deffoo():...print"foo"...>>>classA:...defbar(self):...print"bar"...>>>a=A()>>>foo>>>a.bar>>>>已绑定(bind)的方法已“绑定(bind)”(如何描述)到一个实例,并且该实例将作为第一个参数在方法被调用时传递。不过,作为类属性(而不是实例)的可调用对象仍然是未