2013-07-31 98 views
0

我正在通过Rational类来尝试学习in和out的。我希望我的__init__函数能够接受(int),(Rational,Rational),(Rational,int),(int,Rational)和(int,int)作为参数,但我不知道如何制作它去做。任何建议,建议或修订我已有的?Python Rational类__init__

class Rational(object): 

    def __init__(self,numerator=0,denominator=1): 

     '''Constructor for Rational''' 
     if denominator==0: 
      return 'Denominator cannot be zero.' 
     else: 
      self.n=numerator 
      self.d=denominator 
      return 

回答

1

最好的办法是保持numeratordenominatorint,因此,如果一方或双方均不是整数,将其转换为int例如1,2/3应导致3,2

Python已经有理由但名为fractions虽然是从抽象类numbers.Rational派生,你可以看到​​3210启示。

2

取而代之的回报要raise ZeroDivisionError("Division by 0")

现在已经在你的代码接受有理数;但是你可能想要为他们做一个特殊的处理。您可以使用isinstance,如果:

if isinstance(n, Rational): 
    # ok n is not an int but a rational number... 

,然后重新计算nd

1

您可以使用isinstance。 以下是一种可能的实施方式:

def __init__(self,numerator=0,denominator=1): 
    if isinstance(numerator,int) and isinstance(denominator,int): 
     self.n = numerator 
     self.d = denominator 
    else: 
     if isinstance(numerator,int): 
      numerator = Rational(numerator) 
     if isinstance(denominator,int): 
      denominator = Rational(denominator) 
     self.n = numerator.n*denominator.d 
     self.d = numerator.d*denominator.n 
    if self.d==0: 
     raise ZeroDivisionError()