Python: Surcharge

From Wiki Cours
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

<--Sommaire

Méthodes d'affichage

utilisation nom
conversion en string pour print __str__(self)
affichage __repr__(self)

Opérations mathématiques

Définir ou redéfinir les opérateurs standards permet d'utiliser les symboles mathématiques pour de nouveaux objets:

opération symbole méthode symbole unaire méthode
addition + __add__(self,other) += __iadd__(self,other)
soustraction - __sub__(self,other) -= __isub__(self,other)
multiplication * __mul__(self,other) *= __imul__(self,other)
division / __truediv__(self,other) /= __itruediv__(self,other)
élévation à la puissance ** __pow__(self,other) **= __ipow__(self,other)
division entière // __floordiv__(self,other) //= __ifloordiv__(self,other)
reste de la division entière (modulo) % __mod__(self,other) %= __imod__(self,other)
opération symbole méthode
opposé - __neg__(self)
positif + __pos__(self)
valeur absolue abs() __abs__(self)

Opérateurs de comparaison

opération symbole méthode
égal == __eq__(self,other)
non égal != ou <> __ne__(self,other)
strictement inférieur < __lt__(self,other)
strictement supérieur > __gt__(self,other)
inférieur ou égal <= __le__(self,other)
supérieur ou égal >= __ge__(self,other)
comparaison __cmp__(self,other)

Opérateurs de conteneurs

destinés à des objets pouvant être des conteneurs

opération syntaxe méthode
dimension len(objet) __len__(self)
accès aux éléments en lecture objet[key] __getitem__(self,key)
accès aux éléments en écriture objet[key] __setitem__(self,key,value)

Un exemple

Une classe qui gère l'affiche de l'heure en temps (pas réaliste mais montre bien l'encapsulation des données et la surcharge):

class Temps:
   
    def __init__(self,h=0,m=0,s=0):
        self.heure = h
        self.minute = m
        self.seconde = s
        
    def __str__(self):
        return str(self.heure)+'h' \
            + str(self.minute)+'mn' \
            + str(self.seconde)+'s'

    def __add__(self,other):
        if not other.__class__ is Temps:
            print "Erreur: l'argument n'est pas un Temps"
            return NotImplemented
        res = Temps()        
        res.seconde = (self.seconde+other.seconde)%60
        res.minute = (self.minute+other.minute + (self.seconde+other.seconde)//60)%60
        res.heure = self.heure+other.heure + (self.minute+other.minute)//60
        return res
    
t1,t2 = Temps(1,24,48), Temps(0,52,32)
print(t1, t2, t1+t2)