IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Redefinition de l'addition VS Commutativité


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Points : 34
    Points
    34
    Par défaut Redefinition de l'addition VS Commutativité
    Bonjour,
    Je viens de redéfinir l'addition pour une classe que j'ai créé. J'ai juste une question par rapport à la commutativité.
    J'ai constaté que ma redéfinition n'était pas commutative et j'aimerais savoir s'il existe un moyen de la redéfinir aussi.
    Pour le moment j'ai fait un truc avec des conditions.
    Juste savoir par curiosité si y a pas moyen en redéfinissant l'addition de le faire.

    Merci bien

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Un peu de code illustrant ce que vous racontez serait le bienvenu.
    La réponse sera probablement du côté des "reflected operators" genre __radd__.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Points : 34
    Points
    34
    Par défaut
    Voici un exemple indicatif

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    class A(object):
     
    	def __init__(self, arg):
     
    		self.valeur = 0
     
     
     
     
     
    	def __add__( self, val ):
     
    		if( (isinstance(val, int)) or (isinstance(val, float))):# if the parameter val is an integer or a float 
     
    			return (self.value + val)
     
     
     
    		elif (isinstance(val, A)): 
     
    			return (self.value + val.value)
     
    		else:
     
    			raise TypeError ("The supplied parameter has an incompatible type")
    Suivant ce qui précède
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    a = A() #a new object A
     
    a.valeur = 12
    print a + 12 # everything is good
     
     
     
    print 12 + a # don't work.
    Le but est que 12 + a marche aussi bien que a + 12
    Je vais explorer la piste de __radd__.

    Merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Explorez, explorez...
    La mécanique est là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> class A:
    ...    def __radd__(self, v):
    ...        print ('__radd_:', v)
    ...    def __add__(self, v):
    ...        print ('__add__', v)
    ...
    >>> a = A()
    >>> a + 1
    __add__ 1
    >>> 1 + a
    __radd_: 1
    >>>
    Toute la question est dans la sémantique: pas facile de savoir ce que produira l'addition d'une patate avec une carotte.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Points : 34
    Points
    34
    Par défaut
    C'est justement ce à quoi j'ai pensé mais je m'embrouille quand il faut que je repasse les paramètres.
    J'ai fait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def __radd__(self, val,):
    		return val.__add__(self)
    Mais j'ai l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeError: unsupported operand type(s) for +: 'int' and 'A'

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Ah ben oui, ajouter des patates avec des carottes, c'est bon côté potage mais côté programmation çà ne le fait pas.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 41
    Points : 34
    Points
    34
    Par défaut
    Peux-tu être plus clair stp? Merci

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par dimele Voir le message
    Peux-tu être plus clair stp? Merci
    Il vous appartient de définir ce que fait (et retourne) "object + int" i.e. patate + carotte.
    Et c'est bien plus prise de tête que d'écrire le code.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. addition de champs
    Par k_boy dans le forum Bases de données
    Réponses: 7
    Dernier message: 16/06/2004, 08h56
  2. Addition de dates
    Par shingo dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 19/01/2004, 14h53
  3. Addition et multiplications
    Par Yayel dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 04/04/2003, 23h15
  4. [VB6] Problème d'addition de dates et de nombres
    Par pepper dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 28/11/2002, 21h12
  5. [imprecis]Réaliser a^n avec seulement l'opérateur d'addition
    Par Amon dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 08/11/2002, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo