Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python如何重写在第三方库的模块中定义的方法_Python_Python 3.x - Fatal编程技术网

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

Python如何重写在第三方库的模块中定义的方法,python,python-3.x,Python,Python 3.x,我已通过pip安装了第三方库,需要将方法,例如覆盖到模块(例如tornado.escape)全局范围内定义的\u unicode。因此,对该方法的所有调用都将使用我的重写版本。或者,我想控制它,这样只有我的代码才会使用重写版本 如果它是在一个类中定义的,那么我将毫无问题地对它进行子类化并重写该方法!但由于这只是一个方法,我想知道如何覆盖它 令人惊讶的是,我发现不适合这样的解决方案,是不是这种不可能实现 您只需将对象的名称(在本例中为模块级函数)重新绑定到其他对象即可。例如,你可以 >>

我已通过pip安装了第三方库,需要将方法,例如
覆盖到模块(例如
tornado.escape)全局范围内定义的\u unicode
。因此,对该方法的所有调用都将使用我的重写版本。或者,我想控制它,这样只有我的代码才会使用重写版本

如果它是在一个类中定义的,那么我将毫无问题地对它进行子类化并重写该方法!但由于这只是一个方法,我想知道如何覆盖它


令人惊讶的是,我发现不适合这样的解决方案,是不是这种不可能实现

您只需将对象的名称(在本例中为模块级函数)重新绑定到其他对象即可。例如,你可以

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

但是,这可能会给使用该模块的其他函数带来问题…

您可能应该定义一个继承自tornado的类,并在该类中重新定义所需的方法,以便调用它而不是父类的方法。如我所述,我要覆盖的方法没有在任何类中定义,而是在模块的全局范围内定义的!那么,如果一开始没有类,我将如何重写呢?@thefourtheye什么是“纯”函数?这就是所谓的“猴子补丁”@CSJ是的,这就是所谓的猴子补丁。