Python: Surcharge: Difference between revisions
Jump to navigation
Jump to search
Wiki-cours (talk | contribs) |
Wiki-cours (talk | contribs) m (→Un exemple) |
||
(16 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
__NOTOC__ | __NOTOC__ | ||
[[Memento_Python|<--Sommaire]] | [[Memento_Python|<--Sommaire]] | ||
== Méthodes | == Méthodes d'affichage == | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 7: | Line 7: | ||
! nom | ! nom | ||
|----- | |----- | ||
| | | conversion en string pour '''print''' | ||
| | | __str__(self) | ||
|-{{ligne grise}} | |-{{ligne grise}} | ||
| | | affichage | ||
| | | __repr__(self) | ||
|} | |} | ||
Line 26: | Line 26: | ||
| addition | | addition | ||
| + | | + | ||
| __add__ | | __add__(self,other) | ||
| += | | += | ||
| | | __iadd__(self,other) | ||
|-{{ligne grise}} | |-{{ligne grise}} | ||
| soustraction | | soustraction | ||
| - | | - | ||
| __sub__ | | __sub__(self,other) | ||
| -= | | -= | ||
| | | __isub__(self,other) | ||
|----- | |----- | ||
| multiplication | | multiplication | ||
| * | | * | ||
| | | __mul__(self,other) | ||
| *= | | *= | ||
| | | __imul__(self,other) | ||
|-{{ligne grise}} | |-{{ligne grise}} | ||
| division | | division | ||
| / | | / | ||
| __truediv__ | | __truediv__(self,other) | ||
| /= | | /= | ||
| | | __itruediv__(self,other) | ||
|----- | |----- | ||
| élévation à la puissance | | élévation à la puissance | ||
| ** | | ** | ||
| __pow__ | | __pow__(self,other) | ||
| **= | | **= | ||
| | | __ipow__(self,other) | ||
|----- | |----- | ||
| division entière | | division entière | ||
| // | | // | ||
| __floordiv__ | | __floordiv__(self,other) | ||
| //= | | //= | ||
| | | __ifloordiv__(self,other) | ||
|-{{ligne grise}} | |-{{ligne grise}} | ||
| reste de la division entière (modulo) | | reste de la division entière (modulo) | ||
| % | | % | ||
| __mod__ | | __mod__(self,other) | ||
| %= | | %= | ||
| | | __imod__(self,other) | ||
|} | |} | ||
Line 74: | Line 74: | ||
| opposé | | opposé | ||
| - | | - | ||
| __neg__ | | __neg__(self) | ||
|-{{ligne grise}} | |-{{ligne grise}} | ||
| positif | | positif | ||
| + | | + | ||
| __pos__ | | __pos__(self) | ||
|-{{ligne grise}} | |||
| valeur absolue | |||
| abs() | |||
| __abs__(self) | |||
|} | |||
== Opérateurs de comparaison == | |||
{| class="wikitable" border="1" | |||
! opération | |||
! symbole | |||
! méthode | |||
|----- | |||
| égal | |||
| == | |||
| __eq__(self,other) | |||
|-{{ligne grise}} | |||
| non égal | |||
| != ou <> | |||
| __ne__(self,other) | |||
|-{{ligne grise}} | |||
| strictement inférieur | |||
| < | |||
| __lt__(self,other) | |||
|-{{ligne grise}} | |||
| strictement supérieur | |||
| > | |||
| __gt__(self,other) | |||
|-{{ligne grise}} | |||
| inférieur ou égal | |||
| <= | |||
| __le__(self,other) | |||
|-{{ligne grise}} | |||
| supérieur ou égal | |||
| >= | |||
| __ge__(self,other) | |||
|-{{ligne grise}} | |||
| comparaison | |||
| | |||
| __cmp__(self,other) | |||
|} | |||
== Opérateurs de conteneurs == | |||
destinés à des objets pouvant être des conteneurs | |||
{| class="wikitable" border="1" | |||
! opération | |||
! syntaxe | |||
! méthode | |||
|----- | |||
| dimension | |||
| len(objet) | |||
| __len__(self) | |||
|-{{ligne grise}} | |||
| accès aux éléments en lecture | |||
| objet[key] | |||
| __getitem__(self,key) | |||
|-{{ligne grise}} | |||
| accès aux éléments en écriture | |||
| objet[key] | |||
| __setitem__(self,key,value) | |||
|-{{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)