On peut définir les opérateurs +, - ... sur nos objets.
Un exemple
On définit une classe Chaine pour laquelle on définit:
- L'addition entre deux chaînes avec
__add__
(pour cette opération, on s'est contenté de faire appel au + défini en python entre deux éléments de type str). - La soustraction entre deux chaînes avec
__sub__
(chaine1 - chaine2 renverra chaine1 si chaine2 n'est pas un suffixe de chaine1 et renverra chaine1 privé du suffixe chaine2 sinon). - L'affichage avec
__str__
: si a est du type Chaine défini ici, print(a) affiche la chaîne de caractères renvoyée par la méthode__str__()
.
class Chaine():
def __init__(self, chaine):
self.chaine = chaine
def estPalindrome(self):
"""
Une méthode renvoyant True si la chaine est un palindrome
et False sinon.
"""
if len(self.chaine) <= 1 : return True
for i in range(len(self.chaine)//2):
if self.chaine[i] != self.chaine[-1-i]:
return False
return True
def __sub__(self, ch):
"""
Définition de a - b
pour deux instances a et b de la classe Chaine
"""
if self.chaine[-len(ch.chaine):] == ch.chaine : # si la fin de notre chaîne est égale à ch.chaine
return Chaine(self.chaine[:-len(ch.chaine)]) # on supprime ch.chaine en fin de chaine
else:
return Chaine(self.chaine) # sinon on ne fait rien
def __add__(self, ch):
"""
Définition de a + b
où a et b sont des instances de la classe Chaine.
"""
return Chaine(self.chaine + ch.chaine)
def __str__(self):
"""
On définit ici ce qu'affichera un print sur une instance de la classe Chaine.
"""
return self.chaine
p = Chaine('radar')
print(p.estPalindrome())
q = Chaine('ar')
r = p-q
print("Type de p-q : {}.".format(type(r)) )
print(r)
mot = Chaine('farine')-Chaine('ine') + Chaine('d')
print(mot)
On obtient :
True Type de p-q : <class '__main__.Chaine'>. rad fard