POO

Opérateurs

Une classe Chaine

On peut définir les opérateurs +, - ... sur nos objets.

Un exemple

On définit une classe Chaine pour laquelle on définit:

  1. 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).
  2. 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).
  3. 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

Liste des méthodes pour opérateurs

Pour une liste des opérateurs, vous pouvez consulter cette page extraite de la documentation Python.