如何正确地替换python中在维护方法参数的同时分派给委托的方法

如何正确地替换python中在维护方法参数的同时分派给委托的方法,python,python-3.x,Python,Python 3.x,我正在利用一个异步框架来序列化/反序列化来自连接的数据,并通过一个将来的接口返回反序列化的结果 我的问题是有些RPC调用没有返回值。如果我从反序列化结果返回None,异步框架就会认为反序列化过程有问题 为了解决这个问题,我更新了反序列化程序,以返回一个表示无返回值的令牌。这让我更进一步,但我仍然需要对未来的返回值进行后期处理,以检查该令牌,如果存在,则不返回任何令牌 我正在寻找一个干净的方法来处理这种情况。我可以创建一个委托类来包装未来,并根据需要覆盖所有方法和分派/发布过程,但这感觉过于冗长

我正在利用一个异步框架来序列化/反序列化来自连接的数据,并通过一个将来的接口返回反序列化的结果

我的问题是有些RPC调用没有返回值。如果我从反序列化结果返回
None
,异步框架就会认为反序列化过程有问题

为了解决这个问题,我更新了反序列化程序,以返回一个表示无返回值的令牌。这让我更进一步,但我仍然需要对未来的返回值进行后期处理,以检查该令牌,如果存在,则不返回任何令牌

我正在寻找一个干净的方法来处理这种情况。我可以创建一个委托类来包装未来,并根据需要覆盖所有方法和分派/发布过程,但这感觉过于冗长

另一种尝试是:

 def wrap_future(self, delegate):
    orig_result = delegate.result
    delegate.result = lambda: self.post_process(orig_result.__call__())
    return delegate
这适用于简单的情况,但由于Future可以接受参数,我不太确定如何捕获和传递所述参数


这让我想知道是否有更惯用的方法来完成上述任务?

为什么
orig\u result.\uuu调用
,而不仅仅是
orig\u result()
?另外:是我弄错了,还是您只是想要
lambda*args,**kwargs:self.post_过程(原始结果(*args,**kwargs))
?这容纳了
原始结果
调用的每一个可能的签名。大多数情况下是经验不足:)。谢谢,这就成功了!为什么
orig\u result.\uu调用
orig\u result()
,而不仅仅是
orig\u result()
?另外:是我弄错了,还是您只是想要
lambda*args,**kwargs:self.post_过程(原始结果(*args,**kwargs))
?这容纳了
原始结果
调用的每一个可能的签名。大多数情况下是经验不足:)。谢谢,这就成功了!