什么是monkeypatching?

发布于 2021-01-31 16:02:07

我想了解什么是猴子补丁或猴子补丁?

是方法/操作符重载还是委派?

这些东西有什么共同点吗?

关注者
0
被浏览
210
1 个回答
  • 面试哥
    面试哥 2021-01-31
    为面试而生,有面试问题,就找面试哥。

    不,这与任何事情都不一样。它只是在运行时动态替换属性。

    例如,考虑一个具有method的类get_data。该方法进行外部查找(例如,在数据库或Web API上),并且类中的各种其他方法都调用它。但是,在单元测试中,您不希望依赖于外部数据源-因此,您可以用get_data存根(返回一些固定数据)动态替换该方法。

    由于Python类是可变的,并且方法只是类的属性,因此您可以随意执行此操作-实际上,您甚至可以以完全相同的方式替换模块中的类和函数。

    但是,正如评论员指出的那样,在进行猴子修补时要格外小心:

    如果除了测试逻辑调用之外还有其他要求get_data,它还会调用猴子修补的替代品,而不是原始替代品-可能是好是坏。提防。

    如果存在某些变量或属性get_data,在您替换它时也指向该函数,则该别名将不会更改其含义,并且将继续指向原始变量get_data。(为什么?Python只是get_data将类中的名称重新绑定到其他函数对象;其他名称绑定完全不受影响。)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看