在Python中重载加法运算符时的类方法

时间:2015-03-02 02:09:28

标签: python operator-overloading

在Python中,我正在寻找在重载加法运算符时处理方法的最佳方法。

在下面的示例中,我试图弄清楚我应该在Function类的 add 方法中添加什么。

class Function(object):

    def calculate(self, x):
        raise NotImplementedError()

    def __add__(self, other):
        res = Function()
        res.calculate = lambda x: self.calculate(x) + other.calculate(x)
        return res

class Square(Function):

    def calculate(self, x):
        return x**2

class Cube(Function):

    def calculate(self, x):
        return x**3

在这个例子中,如果我想计算2 ^ 2 + 2 ^ 3,我会做类似的事情

f = Square() + Cube()
print f.calculate(2)

我这样做的方式似乎并不明显,所以我猜测有更好的方法。不确定它是否有帮助,但在我真正的问题中,我正在使用(统计)内核。我必须处理多个方法,我还需要重载乘法运算符。

1 个答案:

答案 0 :(得分:0)

为了更好的方法,请查看作为函数而不是类实现的numpy.poly1d()。这样的事情可能适合您的需求:

def poly(*coeffs):
    def _poly(x,coeffs=coeffs):
        return sum(c*x**i for i,c in enumerate(coeffs))
    return _poly

然后你可以像这样使用它:

fn = poly(4,5,6)
ret = fn(7)
assert(ret == 333)

在这个例子中,我计算了:

4 + 5 * 7 + 6 * 7**2