如何对内部使用其他实例方法的外部库的实例方法进行猴子补丁



我需要修补我正在使用的库的实例方法中的逻辑。为了简洁起见,示例代码。process方法按原样使用Client库的connect方法,但我想将其修改为使用不同的逻辑,而不是parsing_logic_1。做到这一点的最佳方法是什么?如果在Usage类中添加新的_patched_connect方法,我如何访问类变量(如url(?

class Client:
def __init__(self, url)
self.url = url
def connect (self):
if self.url == 'a':
self._parsing_logic_1()
if self.url == 'b':
self._parsing_logic_2()
else:
pass
def _parsing_logic_1(self):
pass
def _parsing_logic_2(self):
pass
def send(self):
pass
# ----separate file --------
class Usage:
def __init__(self, client: Client):
self.client = client

def process(input):
self.client.connect() # the connect method should use a different parsing logic for one case
self.client.send()

您需要导入您的类,然后用修改后的方法替换该方法。在python中,您可以根据需要动态替换方法。

示例:

from x.y.z import Client
def mynewconnect(self):
# your code here
self.url = "..."
pass
Client.connect = mynewconnect

最新更新