J'ai créé une classe Matrice et une classe Fraction qui gèrent chacune la surcharge des opérateurs qui leur sont compatibles.
L'opérateur * est surchargé pour la classe Matrice par les deux méthodes __mul__et __rmul__.
La première effectue le produit de deux matrices et lève une exception si le second argument n'est pas une matrice.
La seconde permet de multiplier la matrice par un scalaire de type int ou Fraction.
Seulement voilà si j'exécute : ma_fraction * ma_matrice ; ça déclenche Fraction.__mul__ et non Matrice.__rmul__ comme escompté. Evidemment Fraction.__mul__ n'est pas conçue pour recevoir une instance de Matrice donc plante.
(Je précise que si j'exécute: ma_matrice.__rmul__(ma_fraction) ça marche parfaitement, c'est donc bien un problème de priorité)
Comment faire pour établir une priorité entre les différentes surcharges de l'opérateur * dans ce cas ambigu? (il s'agit de deux classes qui ne sont pas liées par héritage)
Merci d'avance pour vos réponses!

Partager