Python: Surcharge: Difference between revisions
Jump to navigation
Jump to search
Wiki-cours (talk | contribs) |
Wiki-cours (talk | contribs) m (→Un exemple) |
||
(4 intermediate revisions by the same user not shown) | |||
Line 38: | Line 38: | ||
| multiplication | | multiplication | ||
| * | | * | ||
| | | __mul__(self,other) | ||
| *= | | *= | ||
| | | __imul__(self,other) | ||
|-{{ligne grise}} | |-{{ligne grise}} | ||
| division | | division | ||
Line 139: | Line 139: | ||
| accès aux éléments en écriture | | accès aux éléments en écriture | ||
| objet[key] | | objet[key] | ||
| __setitem__(self,key) | | __setitem__(self,key,value) | ||
|-{{ligne grise}} | |-{{ligne grise}} | ||
|} | |} | ||
== 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): | |||
<source lang="python"> | |||
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) | |||
</source> |
Latest revision as of 14:03, 6 September 2016
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)