我想了解什么是猴子补丁或猴子补丁?
是方法/操作符重载还是委派?
这些东西有什么共同点吗?
最佳答案
不,这与这些东西都不一样。它只是在运行时动态替换属性。
例如,考虑具有方法get_data
的类。该方法进行外部查找(例如,在数据库或Web API上),并且类中的各种其他方法都调用它。但是,在单元测试中,您不希望依赖于外部数据源-因此,您可以使用返回一些固定数据的存根动态替换get_data
方法。
由于Python类是可变的,而方法只是类的属性,因此您可以随意执行此操作-实际上,您甚至可以以完全相同的方式替换模块中的类和函数。
但是,正如commenter指出的那样,在进行猴子修补时要格外小心:
get_data
,它也将调用猴子修补的替代品,而不是原始的替代品-可能是好是坏。提防。 get_data
函数,则该别名不会更改其含义,并且将继续指向原始get_data
。 (为什么?Python只是将类中的名称get_data
重新绑定(bind)到其他函数对象;其他名称绑定(bind)完全不受影响。)