如何修补内部使用其他实例方法的外部库的实例方法?

How to monkey patch an instance method of an external library that uses other instance methods internally?

我需要在我正在使用的库的实例方法中修补逻辑。 为简洁起见的示例代码。 process 方法按原样使用 Client 库的 connect 方法,但我想修改它以使用不同的逻辑而不是 parsing_logic_1。最好的方法是什么?如果我在 Usage class?

中添加新的 _patched_connect 方法,如何访问 class 变量,如 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()

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

示例:

from x.y.z import Client

def mynewconnect(self):
    # your code here
    self.url = "..."
    pass
Client.connect = mynewconnect