Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Général Python
Général Python Forum d'entraide sur les fondamentaux du langage Python, syntaxe, POO, bibliothèque standard, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/12/2012, 10h35   #1
Captain'Flam
Membre habitué
 
Avatar de Captain'Flam
 
anciennement "sopsag"
Inscription : février 2011
Messages : 118
Détails du profil
Informations personnelles :
Nom : anciennement "sopsag"

Informations forums :
Inscription : février 2011
Messages : 118
Points : 138
Points : 138
Par défaut Surcharge d'opérateur à gauche

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 :
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 :
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 !
__________________
Captain'Flam
anciennement Sopsag, aka Hadrien
Win seven 64 / Visual 2010 / Python 2.7 / Eclipse
Captain'Flam est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/12/2012, 11h05   #2
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 690
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 690
Points : 4 518
Points : 4 518
Citation:
Comment coder ma méthode __add__ pour qu'elle accepte un int à gauche et un Num à droite ?
Il suffit d'ajouter __radd__
- W
__________________
Architectures Post-Modernes
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 11h50   #3
Captain'Flam
Membre habitué
 
Avatar de Captain'Flam
 
anciennement "sopsag"
Inscription : février 2011
Messages : 118
Détails du profil
Informations personnelles :
Nom : anciennement "sopsag"

Informations forums :
Inscription : février 2011
Messages : 118
Points : 138
Points : 138
Arf ! quel nigaud !

Merci ça marche impec !
__________________
Captain'Flam
anciennement Sopsag, aka Hadrien
Win seven 64 / Visual 2010 / Python 2.7 / Eclipse
Captain'Flam est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h50.


 
 
 
 
Partenaires

Hébergement Web