我想了解什么是Monkeypatching丁?
是类似方法/操作符的重载或委派吗?
这些东西有什么共同点吗?
不,这不像任何事情。它只是在运行时动态替换属性。
例如,考虑一个具有method的类get_data。该方法进行外部查找(例如,在数据库或Web API上),并且类中的各种其他方法都调用它。但是,在单元测试中,你不希望依赖于外部数据源-因此,你可以用get_data返回一些固定数据的存根动态替换该方法。
method
get_data
由于Python类是可变的,而方法只是类的属性,因此你可以根据需要进行任意操作-实际上,你甚至可以以完全相同的方式替换模块中的类和函数。
但是,正如评论员指出的那样,在进行猴子修补时要格外小心:
如果除了测试逻辑调用之外还有其他要求get_data,它还会调用猴子修补的替代品,而不是原始替代品-可能是好是坏。提防。
如果存在某个变量或属性get_data,在你替换它时也指向该函数,则该别名将不会更改其含义,并将继续指向原始get_data。(为什么?Python只是get_data将类中的名称重新绑定到其他函数对象;其他名称绑定完全不受影响。)
Python
MonkeyPatch是一段Python代码,可在运行时(通常在启动时)扩展或修改其他代码。
一个简单的示例如下所示:
from SomeOtherProduct.SomeModule import SomeClass def speak(self): return "ook ook eee eee eee!" SomeClass.speak = speak