Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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 - Fatal编程技术网

Python:重写第三方模块方法?

Python:重写第三方模块方法?,python,Python,因此,我使用的是我安装的第三方python模块 我是这样开始的: from module import SomeClass sc = SomeClass() sc.process(text); process() 我想修改get_Text()方法以返回修改后的字符串 因此,sc.process(text)将返回与以前不同的结果 我用猴子修补吗?在这里它是如何工作的?我是否复制粘贴get_text()方法,并在运行时对其进行修改和修补?显式优于隐式。在可能的情况下,只需使用继承来更改get\u

因此,我使用的是我安装的第三方python模块

我是这样开始的:

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修补或找到另一种解决方案。您认为即使在模块已导入内存之后,这种方法是否仍然有效?