我定义了理性类,所以例如a = Rational(1,2)#1/2,b = Rational(2,3)#2/3,我想要c = a + b使得c = Rational(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
但是我收到TypeError消息, init 需要3个参数(给定2个),在pls上面的编码中哪里出错了?谢谢!
答案 0 :(得分:0)
根据你的类,通过将分子和分母传递给它来创建Rational
的实例,但是在这里你只是通过传递它的(浮点)值来创建一个实例。当然,有可能找到一个与浮动相当的理性,但你没有教会你的课程如何做,而且它不会神奇地逆向工程。
鉴于添加分数的定义:p / q + r / s =(ps + qr)/ qs,您的加法函数应返回Rational(ps + qr, qs)
。问题是,你没有跟踪你班上的分子和分母,所以你无法检索这些信息。
就目前而言,使用添加功能可以做的最好的事情是将self.value + value2.value
作为float
返回。所以现在,你的班级基本上是一个冗长的分工方式!要有一个有意义的Rational
课程,我强烈建议你尽可能用分子和分母来保留所有内容。
编辑:我忘了提及 - 如果您使用的是Python 2.x,除非您转换v1
中的一个(或两个),否则您的部门将无法正常工作或者在进行除法之前v2
到float
,或者更好的是,在顶部包含行from __future__ import division
,以便除法符合您的预期。