覆盖Django模块类方法


问题内容

在我的Django应用程序中,我通过安装了一个模块pip。我需要覆盖中的某些方法site- packages/module/views.py。我想,我需要将此模块导入我的自定义模块目录中,并简单地继承类和重写方法。

最好的方法是什么?如何在不编写site-packages目录代码的情况下正确执行操作?


问题答案:

您所追求的通常被称为猴子修补

import some_module

def my_method(self):
   pass

some_module.SomeClass.a_method = my_method

请注意,尽管取决于方法的性质和库初始化,但修补该方法可能为时已晚。例如,如果要在模块加载时调用要修补的方法,则在调用它之前将永远无法对其进行修补。

尝试在应用程序启动时尽早修补有问题的类