# Reussir dans la POO c'est se rapprocher au plus pret de la realite from typing import Self class Fraction: def __init__(self, numerateur, denominateur): # Attributs self.numerateur = numerateur # tiers.numerateur = 1 self.denominateur = denominateur self.simplifier() def quotient(self): return self.numerateur / self.denominateur @classmethod # decorateur def from_str(cls, num: str, den: str): return cls(numerateur= int(num), denominateur= int(den)) @staticmethod # Pas de 'self' => Helpers def pgcd(a, b): if b == 0: return a return Fraction.pgcd(a= b, b= a % b) def simplifier(self): a = self.numerateur b = self.denominateur pgcd = Fraction.pgcd(a, b) self.numerateur = self.numerateur // pgcd self.denominateur //= pgcd def __add__(self, fraction): num = (self.numerateur * fraction.denominateur) + (self.denominateur * fraction.numerateur) den = self.denominateur * fraction.denominateur return Fraction(numerateur= num, denominateur= den) def __mul__(self, facteur: int | Self): if isinstance(facteur, int): return Fraction( numerateur= self.numerateur * facteur, denominateur= self.denominateur ) return Fraction( numerateur= self.numerateur * facteur.numerateur, denominateur= self.denominateur * facteur.denominateur ) def __rmul__(self, nombre: int): return self.__mul__(nombre) def __repr__(self): return f"Fraction({self.numerateur}/{self.denominateur})" # le PGCD de 146 et 248 fraction = Fraction.from_str('2', '5') print(fraction * 2) print(2 * fraction)