Python如何覆盖在第三方库的模块中定义的方法

时间:2014-05-14 06:07:41

标签: python python-3.x

我已经通过安装了第三方库tornado,并且需要覆盖方法,比如在此定义的to_unicode模块的全局范围说tornado.escape。因此,对该方法的所有调用都将使用我的重写版本。或者,也许,我想控制它,以便只有我的代码才会使用被覆盖的版本。

如果它已在类中定义,那么将它子类化并覆盖该方法没有问题!但由于这只是一种方法,我想知道如何覆盖它。

令人惊讶的是,我发现在SO中找不到合适的解决方案,这种不可能实现吗?

1 个答案:

答案 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

但是,这可能会导致使用该模块的其他功能出现问题...