我需要修补我正在使用的库的实例方法中的逻辑。为了简洁起见,示例代码。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