Python 简明教程

Python - Monkey Patching

Python 中的 Monkey patching 指的是在运行时动态修改或扩展代码的做法,通常通过替换或向现有 modulesclasses or methods 中添加新功能,而无需更改其原始源代码。此技术通常用于快速修复、调试或添加临时功能。

术语“ monkey patching ”源自于临时性变化想法,类似于猴子如何使用手头的任何材料修补东西。

Steps to Perform Monkey Patching

以下是展示我们如何执行猴子修补的步骤 −

  1. 首先,要应用猴子修补,我们必须导入我们要修改的模块或类。

  2. 在第二步中,我们必须使用所需的行为定义一个新函数或方法。

  3. 通过将其分配给类或模块的属性来用新实现替换原始函数或方法。

Example of Monkey Patching

现在,让我们通过一个示例了解 Monkey patching

Define a Class or Module to Patch

首先,我们必须定义我们要修改的原始类或模块。以下是代码 −

# original_module.py

class MyClass:
   def say_hello(self):
      return "Hello, Welcome to Tutorialspoint!"

Create a Patching Function or Method

接下来,我们必须定义一个函数或方法来对原始类或模块进行猴子修补。此函数将包含我们想要添加的新行为或功能 −

# patch_module.py

from original_module import MyClass

# Define a new function to be patched
def new_say_hello(self):
   return "Greetings!"

# Monkey patching MyClass with new_say_hello method
MyClass.say_hello = new_say_hello

Test the Monkey Patch

现在我们可以测试已修补的功能。在用修补程序为 MyClass 创建实例之前,请确保完成了修补工作 −

# test_patch.py

from original_module import MyClass
import patch_module

# Create an instance of MyClass
obj = MyClass()

# Test the patched method
print(obj.say_hello())  # Output: Greetings!

Drawbacks of Monkey Patching

以下是猴子修补的缺点 −

  1. Overuse: 过度的猴子修补会导致代码难以理解和维护。我们必须谨慎使用它,并在可能的情况下考虑替代设计模式。

  2. Compatibility: 猴子修补可能会引入意外行为,尤其是在复杂系统或大型代码库中。