2016-10-09 17 views
1

RationalクラスをPythonで作成し、__add____mull__などの演算子をそのクラスに対して作成しました。ここで__init____add__機能のための私のコードは次のとおりです。Pythonオーバーロード操作

class Rational(object): 
     def __init__(self, p, q=None): # p/q 
      if q is None: q = 1 
      if q == 0: raise ZeroDivisionError("division by zero!") 
      self.p = p 
      self.q = q 
      self.simplify() # simplify the fraction 

     def __iadd__(self, other): # += 
      self.p = self.p * other.q + self.q * other.p 
      self.q = self.q * other.q 
      self.simplify() 
      return self 

     def __add__(self, other): 
      r = Rational(self.p, self.q) 
      r += other 
      return r 

今私はPythonが1 + Rational(1, 3)(1プラス第3)のようなものを理解したいと思います。私はこれをどのように実装できますか? 関数を追加して、otherがintの場合にケースを追加する必要がありますか?それとも簡単な方法がありますか?

答えて

0

私は、これはあなたが探しているものかもしれないと考えている。この場合には、あなたがそれてint型を追加している、

class Rational(object): 
     def __init__(self, p, q=None): # p/q 
      if q is None: q = 1 
      if q == 0: raise ZeroDivisionError("division by zero!") 
      self.p = p 
      self.q = q 
      self.simplify() # simplify the fraction 

     def __iadd__(self, other): # += 
      self.p = self.p * other.q + self.q * other.p 
      self.q = self.q * other.q 
      self.simplify() 
      return self 

     def __add__(self, other): 
      if type(other) == int : 
       r = Rational(self.p + other * self.q , self.q) 
      else: 
       r = Rational(self.p, self.q) 
       r += other 
      return r 

あなたがあなたの合理的に別の型に追加したときに何が起こるのかを定義することができますこの方法を以下のアイデンティティに依存しています:

(P/Q)+ R =(P + QR)/ Q

私はこれが役に立てば幸い!

EDIT:ダムの数学的なエラーを修正しました。今すぐ固定