覆盖 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
我已经在我的 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