🎲 Les objets
Jusqu'à présent, nous avons manipulé des variables, des listes et des fonctions séparément. La programmation orientée objet (POO) consiste à regrouper des données et les traitements associés dans une même structure appelée objet. Les objets sont créés à partir de modèles appelés classes.
🤔 Qu'est-ce qu'un objet ?
Prenons l'exemple d'un chat qui possède des attributs :
- un nom
- un âge
- une race
Il peut également :
- miauler
- courir
- jouer
Ce sont ses méthodes. Une classe sert donc à définir :
- les attributs d'un objet ;
- les méthodes disponibles sur cet objet.
✳️ Créer une classe et des objets
Une classe se crée avec le mot-clé class.
class Animal:
def __init__(self, nom, age):
self.nom = nom
self.age = age
La méthode spéciale __init__() est automatiquement appelée lors de la création d'un objet.
Elle permet d'initialiser les attributs. Pour créer un objet, il suffit ensuite d'utiliser le nom de
la classe.
chat = Animal("Pipelette", 1)
print(chat.nom)
print(chat.age)
Résultat :
Pipelette
1
Chaque objet possède ses propres valeurs. Bien qu'ils soient créés à partir de la même classe, leurs attributs sont indépendants.
chat = Animal("Pipelette", 1)
hamster = Animal("Croquette", 2)
📜 Les méthodes et les attributs
Une classe peut contenir des fonctions appelées méthodes.
class Animal:
def __init__(self, nom, age):
self.nom = nom
self.age = age
def se_presenter(self):
return f"Je suis {self.nom} et j'ai {self.age} ans."
Utilisation :
chien = Animal("Rex", 5)
print(chien.se_presenter())
Résultat :
Je suis Rex et j'ai 5 ans.
Le mot-clé self
Le paramètre self représente l'objet en cours d'utilisation.
Il permet d'accéder aux attributs et aux autres méthodes de cet objet.
self.nom
self.age
Dans la pratique, il suffit de retenir que self désigne l'objet actuel.
Modifier un attribut
chien = Animal("Rex", 5)
chien.age = 6
print(chien.age)
Résultat :
6
Méthodes avec paramètres
Comme les fonctions, les méthodes peuvent recevoir des arguments.
class CompteBancaire:
def __init__(self, titulaire, solde=0):
self.titulaire = titulaire
self.solde = solde
def deposer(self, montant):
self.solde += montant
def afficher_solde(self):
return f"Solde : {self.solde} €"
Utilisation :
compte = CompteBancaire("Alice", 100)
compte.deposer(50)
print(compte.afficher_solde())
Résultat :
Solde : 150 €
Afficher un objet avec __str__()
Par défaut, Python affiche une représentation peu lisible des objets.
La méthode spéciale __str__() permet de personnaliser cet affichage.
class Livre:
def __init__(self, titre, pages):
self.titre = titre
self.pages = pages
def __str__(self):
return f"{self.titre} ({self.pages} pages)"
livre = Livre("Python pour tous", 250)
print(livre)
Résultat :
Python pour tous (250 pages)
💸 L'héritage
L'héritage permet de créer une nouvelle classe à partir d'une classe existante. La nouvelle classe récupère automatiquement les attributs et méthodes de la classe parent.
class Animal:
def __init__(self, nom):
self.nom = nom
def se_presenter(self):
return f"Je suis {self.nom}"
class Chat(Animal):
def miauler(self):
return "Miaaaou !"
Utilisation :
Pipelette = Chat("Pipelette")
print(Pipelette.se_presenter())
print(Pipelette.miauler())
Résultat :
Je suis Pipelette
Miaaaou !
L'héritage permet d'éviter de réécrire du code déjà existant.
🟩 Les objets et Excel
Il est tout à fait possible de créer et d'utiliser des objets dans les fonctions Python utilisées par Excel. Cependant, Excel ne sait pas afficher directement des objets personnalisés dans une cellule. Une fonction appelée depuis Excel doit généralement renvoyer un type simple (un nombre, une chaîne de caractères, un booléen, une liste, une liste de listes).
class Employe:
def __init__(self, nom, salaire):
self.nom = nom
self.salaire = salaire
Cette fonction ne sera généralement pas exploitable directement dans Excel :
def creer_employe():
return Employe("Thomas", 4000)
En revanche, il est tout à fait possible d'utiliser l'objet à l'intérieur de la fonction puis de renvoyer un résultat exploitable par Excel.
class Employe:
def __init__(self, nom, salaire):
self.nom = nom
self.salaire = salaire
def salaire_annuel(nom, salaire):
employe = Employe(nom, salaire)
return employe.salaire * 12
Excel recevra alors simplement un nombre. Les objets sont donc principalement utilisés pour organiser le code et représenter des données complexes. Dans les compléments Python pour Excel, ils servent le plus souvent en interne aux fonctions plutôt qu'à être renvoyés directement dans les cellules.