在类定义中包装另一个方法

时间:2012-03-24 12:46:50

标签: python class properties python-3.x instance-methods

我想创建一个方法(set),将参数注入另一个(set_result)。我使用partial尝试了这一点,如下所示。

from functools import partial

class MyClass(MyClassParent):
    set = partial(MyClassParent.set_result, None)

但这不起作用。在set的实例上调用MyClass时,我收到此错误:

TypeError: set_result() takes exactly 2 arguments (1 given)

我认为这意味着未传递隐式self。如果我这样写set就可以了:

def __init__(self, *args, **kwds):
    super().__init__(*args, **kwds)
    self.set = partial(self.set_result, None)

如何使用前一种方法包裹set_result

3 个答案:

答案 0 :(得分:0)

set = staticmethod(partial(MyClassParent.set_result, None))

答案 1 :(得分:0)

class MyClass(MyClassParent):
    set = partial(MyClassParent.set_result, MyClassParent, None)

答案 2 :(得分:0)

这不起作用的原因是functools.partial不是描述符。在实例上访问它不会返回绑定方法。

跟踪器上有一个Python bug,我提交了patch