Python Rational Class __init__

时间:2013-07-31 01:50:07

标签: python python-3.x

我正在通过Rational课程并尝试学习in和out。我希望我的__init__函数能够接受(int),(Rational,Rational),(Rational,int),(int,Rational)和(int,int)作为参数,但我不知道如何做到这一点。对我已有的任何建议,建议或修改?

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

3 个答案:

答案 0 :(得分:2)

而不是返回,您想要raise ZeroDivisionError("Division by 0")

现在您的代码已经接受了Rational;但是你可能想对它们进行特殊处理。您可以在if:

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

然后重新计算nd

答案 1 :(得分:1)

最好的方法是将numeratordenominator保持为int,因此如果其中一个或两个都不是int,请将它们转换为int,例如1,2/3将导致3,2

Python已经有了理性,但命名为fractions,虽然派生自抽象类numbers.Rational,但你可以看到source code的启示。

答案 2 :(得分: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()