Skip to main content
 首页 » 编程设计

Python 类添加分数

2025年05月04日17java哥

我有这个类,它接受一个整数和一个分数,并将它们相加。然而,问题是 __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)