我有这个类,它接受一个整数和一个分数,并将它们相加。然而,问题是 __add__ 函数在这里将答案转换为 __str__ 所以当我尝试打印 __repr__ 的答案时一个添加的问题,它只打印答案的 str。
from fractions import Fraction
class MixedNumber(object):
def __init__(self, whole_number, fraction):
self.whole_number = whole_number
self.fraction = fraction
def __repr__(self):
return "MixedNumber({}, Fraction({}, {})".format(self.whole_number, self.fraction.numerator, self.fraction.denominator)
def __add__(self, g):
summed = 0
for v in (self.whole_number, g.whole_number, self.fraction, g.fraction):
summed = Fraction(summed.numerator * v.denominator +
v.numerator * summed.denominator,
summed.denominator * v.denominator)
whole = summed.numerator // summed.denominator
remainder = Fraction(summed.numerator * whole.denominator -
whole.numerator * summed.denominator,
summed.denominator * whole.denominator)
return '{} and {}'.format(whole,remainder)
if __name__=='__main__':
x = MixedNumber(3, Fraction(1, 3))
y = MixedNumber(-1, Fraction(2, 5))
z = x + y
print(z)
print(z.__repr__())
例如: 这个的输出是
2 and 11/15
'2 and 11/15'
应该是什么时候
2 and 11/15
MixedNumber(2, Fraction(11, 15))
如果能帮助解决这个问题,我们将不胜感激。
请您参考如下方法:
改为返回 MixedNumber 的新实例:
return MixedNumber(whole, remainder)
或者,为了使其对子类更友好,type(self):
return type(self)(whole, remainder)
现在您的代码打印:
>>> x = MixedNumber(3, Fraction(1, 3))
>>> y = MixedNumber(-1, Fraction(2, 5))
>>> z = x + y
>>> print z
MixedNumber(2, Fraction(11, 15)
>>> print repr(z)
MixedNumber(2, Fraction(11, 15)
但您可以显式打印 __add__ 的旧结果:
>>> print '{} and {}'.format(z.whole_number, z.fraction)
2 and 11/15
您可以将其设为您的 __str__ 方法:
def __str__(self):
return '{} and {}'.format(z.whole_number, z.fraction)
之后您的 print 语句将是:
>>> print z
2 and 11/15
>>> print repr(z)
MixedNumber(2, Fraction(11, 15)
