You can do something like this :
class Fraction:
def __init__(self, counter, denominator):
self.counter = counter
self.denominator = denominator
def add(self, fraction):
return Fraction(self.counter * fraction.denominator + fraction.counter * self.denominator,
self.denominator * fraction.denominator)
a = Fraction(2, 3)
b = Fraction(3, 5)
a_plus_b = a.add(b)
print(a_plus_b.counter, a_plus_b.denominator)
You can add type checking directly in the add function :
def add(self, fraction):
if not isinstance(fraction, Fraction):
raise TypeError(f"{fraction} is not a Fraction.")
return Fraction(self.counter * fraction.denominator + fraction.counter * self.denominator,
self.denominator * fraction.denominator)
If you want to integrate this in the standard fractions module, you can make a class inheriting from fractions.Fraction, which will outpute you a nice irreductible fraction :
import fractions
class MyFraction(fractions.Fraction):
def add(self, fraction):
return MyFraction(self.numerator * fraction.denominator + fraction.numerator * self.denominator,
self.denominator * fraction.denominator)
a = MyFraction(2, 3)
b = MyFraction(10, 6)
a_plus_b = a.add(b)
print(a_plus_b.numerator, a_plus_b.denominator)