所以我有一个Polynomial超类和一个Quadratic子类,我想修改 add 运算符,所以它不返回一个多项式对象,而是返回一个Quadratic对象,我该怎么做呢?
这是多项式添加,它返回一个多项式对象
def __add__(self, other):
newPoly = Polynomial()
for i in range(len(self.coeffs)):
newPoly.addterm(self.coeffs[i][0], self.coeffs[i][1])
newPoly.addterm(other.coeffs[i][0], other.coeffs[i][1])
return (newPoly)
这是二次类:
class Quadratic(Polynomial):
def __init__(self, quad, lin, con):
Polynomial.__init__(self, (quad, 2), (lin, 1), (con, 0))
那么如何修改 add 运算符以使其返回Quadratic对象而不是Polynomial?
答案 0 :(得分:0)
我觉得你试图从超类的方法返回一个子类的实例,因为超类通常意味着更一般的概念。
我认为你可以用传入的适当参数调用Quadratic的构造函数。
def __add__(self, other):
newQuad = Quad(0,0,0)
for order,(c1,c2) in enumerate(zip(self.coeffs,other.other)):
newQuad.addterm(c1[0], c1[1])
newQuad.addterm(c2[0], c2[1])
if order == 1:
break
return (newQuad)
我已经用更易读的Pythonic方式修改了你的代码。
老实说,我认为没有必要为每个订单派生一个子类,你可以通过附加属性来简单记录订单信息。
最后,不建议在子类的代码中显式写入超类的名称,因为它会降低灵活性.Python有一个名为“super”的关键字,它可以让你调用超类的方法而不直接通过它的名字,但是有一个关于关键字的很多细节,所以你可能想要自己研究文档。