The special method __repr__ gives us the ability to define the way the object is represented in a Python interpreter. For rational numbers, a possible definition of this method could be as follows:
class RationalNumber: ... def __repr__(self):
return f'{self.numerator} / {self.denominator}'
With this method defined, just typing q returns 10 / 20.
We would like to have a method that performs the addition of two rational numbers. A first attempt could result in a method like this:
class RationalNumber: ... def add(self, other):
p1, q1 = self.numerator, self.denominator
if isinstance(other, int):
p2, q2 = other, 1
else:
p2, q2 = other.numerator, other.denominator
return RationalNumber(p1 * q2 + p2 * q1, q1 * q2)
A call to this method takes the following form:
q = RationalNumber(1, 2) p = RationalNumber(1, 3) q.add(p) # returns the RationalNumber for 5/6
It would be much...