所以我有一个 Polynomial 超类和一个 Quadratic 子类,我想修改add运算符,而不是返回一个多项式对象,它返回一个 Quadratic 对象,我该怎么做?
这是这个 Polynomial add并返回一个 Polynomial 对象
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 呢?
在我看来,您试图从超类的方法返回子类的实例很奇怪,因为超类通常意味着更一般的概念。
我认为您可以使用传入的适当参数调用 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”的关键字,它可以让你不通过它的名称直接调用超类的方法,但有很多细节关于关键字,所以你可能想自己研究文档。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句