我已经通过点安装了第三方库tornado,并且需要覆盖方法,比如在此定义的to_unicode
模块的全局范围说tornado.escape
。因此,对该方法的所有调用都将使用我的重写版本。或者,也许,我想控制它,以便只有我的代码才会使用被覆盖的版本。
如果它已在类中定义,那么将它子类化并覆盖该方法没有问题!但由于这只是一种方法,我想知道如何覆盖它。
令人惊讶的是,我发现在SO中找不到合适的解决方案,这种不可能实现吗?
答案 0 :(得分:9)
您可以简单地将对象的名称(在本例中为模块级函数)重新绑定到其他对象。例如,if you want to have math.cos
work with degrees instead of radians,你可以做
>>> 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
但是,这可能会导致使用该模块的其他功能出现问题...