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