我一直在网上冲浪,但我不知道猴子打嗝是什么。
起初我以为它是语言独有的Python
,但似乎并非如此,而且我以前从未听说过这个词。
据我所知,它看起来像是一种覆盖代码的方法,但我还没有很好地理解它。
有人可以向我解释一下猴子补丁是什么吗?它是如何使用的,它有哪些应用程序?
我一直在网上冲浪,但我不知道猴子打嗝是什么。
起初我以为它是语言独有的Python
,但似乎并非如此,而且我以前从未听说过这个词。
据我所知,它看起来像是一种覆盖代码的方法,但我还没有很好地理解它。
有人可以向我解释一下猴子补丁是什么吗?它是如何使用的,它有哪些应用程序?
“Monkey Patching”这个术语不仅用在 Python 中,它也用在其他编程语言中,如
JavaScript
,Ruby
等。这意味着我们可以在代码中对之前定义的类和模块进行修改,在运行时。
它的用途和应用程序多种多样,但基本上它允许您将现有功能添加到可能对您正在开发的项目有用的类和其他模块中,而无需修改所述模块。
为此,我们使用的语言必须是动态的。为了更好地理解它,我将把答案放在与语言无关的 Python 中。
语言不可知论者
我认为解释它的最好方法是举个例子。
Persona
假设我定义了一个只有方法的被调用类información
:这个类
Persona
在一个模块中,我需要这个人能够打招呼。通过应用Monkey PatchingPersona
,我可以在自己的脚本中重新定义类,创建问候语。通过这种方式,班级
Persona
将能够打招呼,尽管这在人所在的地方没有定义。离开
强调
Persona
该方法没有被注入到找到的模块中saludo
。这个模块仍然完好无损,人们只能在我们的脚本中打个招呼。在蟒蛇
对于 Python 示例,我们可以选择已在其库之一中创建的任何类,例如,我将使用分数库及其类
Fraction
,并且我将查询一个属性:离开:
正如我们所看到的,该类
Fraction
没有该属性devuelve_cuatro
,因此它给了我们一个错误,但我可以使用Monkey Patching来定义它离开:
4
这里我们已经创建了
f2_5
已经具有属性的对象devuelve_cuatro
显然这个例子很傻,没有人会想要这样做,但是例如通过Monkey Patching在类中实现会很有趣
Fractión
,一个告诉我们分数是否为整数的方法,让我们这样做:离开:
在 Python 的特定情况下,用(例如)编写的内置模块有一个例外, Monkey Patching不能应用于这些,但用纯 Python 编写的所有东西都可以。
C
random