Python如何重写第三方库模块中的方法

18 投票
1 回答
15801 浏览
提问于 2025-04-18 06:29

我通过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

不过,这样做可能会对其他使用这个模块的函数造成问题……

撰写回答