Python:重写第三方模块方法?
因此,我使用的是我安装的第三方python模块 我是这样开始的:Python:重写第三方模块方法?,python,Python,因此,我使用的是我安装的第三方python模块 我是这样开始的: from module import SomeClass sc = SomeClass() sc.process(text); process() 我想修改get_Text()方法以返回修改后的字符串 因此,sc.process(text)将返回与以前不同的结果 我用猴子修补吗?在这里它是如何工作的?我是否复制粘贴get_text()方法,并在运行时对其进行修改和修补?显式优于隐式。在可能的情况下,只需使用继承来更改get\u
from module import SomeClass
sc = SomeClass()
sc.process(text);
process()
我想修改get_Text()
方法以返回修改后的字符串
因此,sc.process(text)
将返回与以前不同的结果
我用猴子修补吗?在这里它是如何工作的?我是否复制粘贴get_text()
方法,并在运行时对其进行修改和修补?显式优于隐式。在可能的情况下,只需使用继承来更改get\u text
class SomeOtherClass(SomeClass):
def get_text(self):
return someClass.get_text(self) + ' bar'
你为什么不试一下呢
>>> import os
>>> os.getcwd()
'/home/sivacn'
>>>
>>> def getcwd():
... return 'Patched'
...
>>> os.getcwd = getcwd
>>>
>>> os.getcwd()
'Patched'
>>>
原则上我同意,但听起来好像是从另一个类调用了get\u text()
——在这种情况下,重写process()
本身可能是有利的,甚至是必要的。@Andrewgorcest是正确的<代码>获取文本()
在另一个类中<代码>另一个类由SomeClass
在其初始化中加载。我是否需要导入另一个类
,然后覆盖获取文本
?我之所以不想覆盖整个进程()
,是因为它相当长,并且使用了其他几个模块和包,我不想复制粘贴整个过程只是为了改变一些事情。@javastudent process()正在实例化另一个类。除非您更改process()或对模块进行修补,否则process()将始终实例化您不想要的另一个类,而不是您创建的一些新变量。我同意,如果覆盖process()会涉及大量的复制粘贴,那么覆盖process()是一个丑陋的选项,尽管这听起来像是您正在导入的这个模块可能没有很好的架构(很难说有这么少的上下文)。但是,在这种情况下,您将不得不进行monkey修补或找到另一种解决方案。您认为即使在模块已导入内存之后,这种方法是否仍然有效?