2017-04-26 9 views
0

したがって、多項式のスーパークラスと2次のサブクラスを持ち、を追加する演算子を追加するので、多項式オブジェクトを返すのではなく、2次オブジェクトを返します。ここでクラス階層のメソッドを変更する

は、この多項式を追加され、それは多項式オブジェクト

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)) 

それでは、どのように私はがそれようオペレータを追加、変更することができます多項式の代わりに二次的なオブジェクトを返しますか?

+5

二次関数に何かを追加することは必ずしも二次関数になるとは限りません。それはより高い程度であるかもしれない、または二次的な項が相殺されるかもしれない。二次関数は、多項式クラスの特別なコンストラクタのように、サブクラスでなければならないものに似ています。 – jasonharper

答えて

0

スーパークラスは通常より一般的な概念を意味するので、スーパークラスのメソッドからサブクラスのインスタンスを返そうとしていると私はうんざりしていました。

私はあなただけで渡された適切な引数を持つ二次のコンストラクタを呼び出すことができます。

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) 

私は読みやすく、Python的な方法であなたのコードを修正したと思います。

正直言って、私は各注文のサブクラスを派生させる必要はないと思うので、例の追加属性で注文情報を記録することができます。

最後に、柔軟性を低下させるので、サブクラスのコードにスーパークラスの名前を明示的に書き込むことはお勧めしません.Pythonにはスーパークラスのメソッドを呼び出すことができる "super"というキーワードがありますが、そのキーワードに関する多くの詳細がありますので、あなた自身でドキュメントを勉強したいかもしれません。

関連する問題