I want to create a method that only takes objects of the class it is is defined in, manipulates it and returns a new object of the same class.
For example:
JavaScript
x
9
1
class fraction():
2
def__init__(self, counter, denominator):
3
self.counter=counter
4
self.denominator=denominator
5
6
def add(self,(object of class fraction))
7
(addition of object the method from called in and the object which is called in the method
8
return (new object of the class fraction)
9
Does anyone have an idea how to get this done? best regards, David
Advertisement
Answer
You can do something like this :
JavaScript
1
15
15
1
class Fraction:
2
def __init__(self, counter, denominator):
3
self.counter = counter
4
self.denominator = denominator
5
6
def add(self, fraction):
7
return Fraction(self.counter * fraction.denominator + fraction.counter * self.denominator,
8
self.denominator * fraction.denominator)
9
10
11
a = Fraction(2, 3)
12
b = Fraction(3, 5)
13
a_plus_b = a.add(b)
14
print(a_plus_b.counter, a_plus_b.denominator)
15
You can add type checking directly in the add function :
JavaScript
1
6
1
def add(self, fraction):
2
if not isinstance(fraction, Fraction):
3
raise TypeError(f"{fraction} is not a Fraction.")
4
return Fraction(self.counter * fraction.denominator + fraction.counter * self.denominator,
5
self.denominator * fraction.denominator)
6
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 :
JavaScript
1
15
15
1
import fractions
2
3
4
class MyFraction(fractions.Fraction):
5
6
def add(self, fraction):
7
return MyFraction(self.numerator * fraction.denominator + fraction.numerator * self.denominator,
8
self.denominator * fraction.denominator)
9
10
11
a = MyFraction(2, 3)
12
b = MyFraction(10, 6)
13
a_plus_b = a.add(b)
14
print(a_plus_b.numerator, a_plus_b.denominator)
15