У меня есть этот класс, который принимает целое число и долю и добавляет их вместе. Проблема, однако, в том, что функция __add__
преобразует ответ в __str__
, поэтому, когда я пытаюсь распечатать __repr__
в ответ на добавленный вопрос, он просто печатает str
ответа.Фракции класса класса Python
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))
Любая помощь решению этой проблемы была бы оценена.
ОП может также добавить '__str__' метод, который возвращает '' {} и {} '. format (self.whole_number, self.fraction) ', так что' print z' будет показывать '2 и 11/15', а' print repr (z) 'будет показывать' MixedNumber (2 , Фракция (11, 15)). – SethMMorton
Похоже, что закрывающая скобка отсутствует в выводах «print» в вашем примере. Это ничего не меняет, а просто наблюдает. – SethMMorton
@SethMMorton: * оригинал * '__repr__' отсутствует закрывающая скобка, да. –