0

我正在定义理性类,例如 a = Rational(1,2) #1/2 和 b = Rational(2,3) #2/3,我想要 c = a + b 以便 c = 有理数(7,6)#7/6。到目前为止,我的代码是:

class Rational(object):
    def __init__(self, v1, v2):
        self.value = v1/v2
    def  __add__(self, value2):
        return Rational(self.value + value2.value)
a = Rational(1,2)
b = Rational(2,3)
c = a+b

但是我收到了初始化需要 3 个参数(给定 2 个)的 TypeError 消息,请问上面的编码哪里出错了?谢谢!

4

1 回答 1

0

根据您的课程,您可以Rational通过将分子和分母传递给它来创建一个实例,但在这里您试图通过传递其(浮点)值来创建一个实例。当然,有可能找到一个与浮点数等价的有理数,但你还没有教你的班级如何去做,它也不会神奇地对自身进行逆向工程。

给定加法的定义:p/q + r/s = (ps + qr) / qs,你的加法函数应该返回Rational(ps + qr, qs). 问题是,您没有跟踪班级中的分子和分母,因此您无法检索此信息。

就目前的情况而言,使用加法函数可以做的最好的事情就是将 aself.value + value2.value作为 a返回float。就目前而言,您的课程基本上是一种冗长的除法方式!为了有一个有意义的Rational课程,我强烈建议你尽可能地保留分子和分母的所有内容。


编辑:我忘了提 - 如果您使用的是 Python 2.x,您的除法将无法正常工作,除非您在进行除法之前将其中一个(或两者)转换为,或者更好的v1v2,在顶部,因此该除法的行为与您预期的一样。floatfrom __future__ import division

于 2018-03-06T21:14:25.560 回答