我正在定义理性类,所以例如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
但是我得到了TypeError消息,init需要3个参数(给定2个),它在上面的编码中出错了吗?谢谢!
根据你的类,你通过传递分子和分母来创建一个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
,以便除法符合您的预期。