Bonjour,

voici une classe Num qui implémente l'addition sur des entiers.
(code minimaliste juste pour l'exemple)

J'ai surchargé la méthode __add__.
Elle permet de faire des calculs entre Nums et entre Num et int.
Ça marche très bien, sauf dans un cas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
class Num:
    def __init__(self,n=0):
        self.n = int(n)
    def __add__ (self,N):
        if not isinstance( N,Num ):
            N = Num( N )
        return Num( self.n + N.n )
 
a,b,c = Num( 3 ),Num( 5 ),Num()
c = a+b
b = c+7
a = 9+b  # ne marche pas !
Si mon int est à gauche, il ne sait plus calculer...
Comment coder ma méthode __add__ pour qu'elle accepte un int à gauche et un Num à droite ?
Pour info, et pour les C++istes, voici le code C++ dont j'aimerais copier le comportement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct Num
    {
    Num ( int n = 0 )                                { _n = n ;}
    Num operator + ( const Num & N ) const           { return Num( _n + N._n ) ;}
    friend Num operator + ( int n , const Num & N )  { return Num( n + N._n ) ;}  // méthode qui me manque en python
    int _n ;
    };
 
void foo ()
    {
    Num a( 5 ),b( 7 ),c ;
    c = a+b ;
    a = b+3 ;
    b = 5+c ; // ce que je voudrais pouvoir écrire en python
    }
Merci de vos idées !