为了账号安全,请及时绑定邮箱和手机立即绑定

猴子打补丁是什么?

猴子打补丁是什么?

jeck猫 2019-06-12 16:02:02
猴子打补丁是什么?我试着理解,什么是猴子补丁还是猴子补丁?这是否类似于方法/操作符重载或委托?这些东西有什么共同之处吗?
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

不,不像那些东西。它只是在运行时动态替换属性。

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

因为Python类是可变的,方法只是类的属性,所以您可以随心所欲地这样做-事实上,您甚至可以用完全相同的方式替换模块中的类和函数。

但是,作为一个评论员请指出,当猴子点击时要小心:

  1. 如果除了您的测试逻辑调用之外,还有什么其他的get_data同样,它也会把你的猴子称为修补的替代品,而不是原来的-这可能是好的,也可能是坏的。小心点。

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


查看完整回答
反对 回复 2019-06-12
?
偶然的你

TA贡献1841条经验 获得超3个赞

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

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

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

资料来源: 猴贴Zope wiki上的一页。


查看完整回答
反对 回复 2019-06-12
  • 3 回答
  • 0 关注
  • 653 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信