Python-什么是Monkeypatching丁?

发布于 2021-02-02 23:22:44

我想了解什么是Monkeypatching丁?

是类似方法/操作符的重载或委派吗?

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

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

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

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

    由于Python类是可变的,而方法只是类的属性,因此你可以根据需要进行任意操作-实际上,你甚至可以以完全相同的方式替换模块中的类和函数。

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

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

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



  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    MonkeyPatch是一段Python代码,可在运行时(通常在启动时)扩展或修改其他代码。

    一个简单的示例如下所示:

    from SomeOtherProduct.SomeModule import SomeClass
    
    def speak(self):
        return "ook ook eee eee eee!"
    
    SomeClass.speak = speak
    


面圈网VIP题库

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

去下载看看