0

我正在学习 Rational 课程并尝试学习进出。我希望我的__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
4

3 回答 3

2

而不是你想要的回报raise ZeroDivisionError("Division by 0")

现在您的代码已经接受了 Rationals;但是,您可能希望对它们进行特殊处理。您可以isinstance在以下情况下使用:

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

然后重新计算nd

于 2013-07-31T01:56:24.610 回答
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()
于 2013-07-31T02:02:59.940 回答
1

最好的方法是保留numeratorand denominatoras int,所以如果它们中的一个或两个不是 int ,则将它们转换为 int ,例如1,2/3将导致3,2

Python 已经有了有理数,但被命名为分数,虽然是从抽象类派生的numbers.Rational,你可以查看源代码以获得启发。

于 2013-07-31T01:55:22.873 回答