Python如何重写第三方库模块中的方法
我通过pip安装了一个第三方库,叫做tornado,现在我想要重写一个方法,比如说to_unicode
,这个方法是在一个模块的全局范围内定义的,比如tornado.escape
。我希望所有对这个方法的调用都能使用我重写的版本。或者,我也想控制一下,让只有我的代码能使用这个重写的版本。
如果这个方法是在一个类里面定义的,那我可以很简单地通过继承这个类来重写它!但是因为这个方法只是一个普通的方法,我就不知道该怎么重写了。
让我惊讶的是,我在StackOverflow上没有找到合适的解决方案,这种事情真的无法实现吗?
1 个回答
21
你可以很简单地把一个对象的名字(在这里指的是一个模块里的函数)换成另一个对象。比如说,如果你想让 math.cos
函数用角度而不是弧度来计算,你可以这样做:
>>> 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
不过,这样做可能会对其他使用这个模块的函数造成问题……