from fractions import Fraction
@property
def with_entier(self):
return (
self.numerator // self.denominator
,self.numerator % self.denominator
,self.denominator
)
@classmethod
def from_sep_entier(cls, entier, numerator, denominator):
return cls(numerator + entier * denominator, denominator)
default_repr = Fraction.__repr__
def repr_with_entier(self):
int_part, remainder, denominator = self.with_entier
if remainder:
return '<{} {}/{}>'.format(int_part, remainder, denominator)
else:
return default_repr(self)
Fraction.__repr__ = repr_with_entier
Fraction.__str__ = repr_with_entier
Fraction.with_entier = with_entier
Fraction.from_sep_entier = from_sep_entier
res = Fraction.from_sep_entier(1,1,3) + Fraction.from_sep_entier(2,1,3)
res
Out[3]: <3 2/3>
res.with_entier
Out[4]: (3, 2, 3)
Fraction(5,3) + Fraction(2,3)
Out[5]: <2 1/3>
Fraction(2,3) + Fraction(4,3)
Out[6]: Fraction(2, 1)