覆盖 python 包 util 方法

Override python package util method

我已经在我的 Django 项目中安装了一个包,比方说 pip install somepackage

这个包附带了一些修改过的视图,所以我这样做:

class MyView(somepackage.CustomView):
    ...

但是 somepackage.utils (somepackage.utils.somemethod) 中有一些方法我需要自定义。如果这是 somepackage.CustomView 中的方法,我可以这样做:

class MyView(somepackage.CustomView):

    def somemethod(...):
        ...

但事实并非如此。

如何覆盖该实用程序的方法?

随着讨论的进行,我认为我们可以在模块级功能上做 "monkey patch",这基本上是用您的版本替换功能。已经有一个 answer 解释了这一点,但在这里引用它(将 math 替换为 somepackage.utils):

>>> import math
>>> math.cos(90)
-0.4480736161291701
>>> old_cos = math.cos
>>> def new_cos(degrees):
...     return old_cos(math.radians(degrees))
...
>>> math.cos = new_cos
>>> math.cos(90)
6.123233995736766e-17